From 3f50498b3e40c4c0b04ba712ae7dc23903158402 Mon Sep 17 00:00:00 2001 From: Brant Burnett Date: Sun, 10 Dec 2023 10:10:09 -0500 Subject: [PATCH 1/2] Improve NuGet packaging information --- README.md | 9 +++++++-- src/CenterEdge.Async/CenterEdge.Async.csproj | 14 +++++++++++++- src/CenterEdge.Async/icon.png | Bin 0 -> 8476 bytes 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 src/CenterEdge.Async/icon.png diff --git a/README.md b/README.md index 99877e9..b375d6a 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,11 @@ AsyncHelper.RunSync(() => SomeFunctionAsync(param1, param2)); // Basic usage for an action running Task or ValueTask var result = AsyncHelper.RunSync(() => SomeFunctionAsync(param1, param2)); + +// Pass in state as a parameter to reduce heap allocations due to closures +AsyncHelper.RunSync(state => SomeFunctionAsync(state, true), param1); +// or you can use a method group if parameters align precisely +AsyncHelper.RunSync(SomeFunctionAsyncWithOneParameter, param1); ``` ## Background @@ -66,8 +71,8 @@ best approach. cd src/CenterEdge.Async.Benchmarks # x64 -dotnet run -c Release -f net5.0 -- job default --runtimes net48 netcoreapp31 netcoreapp50 +dotnet run -c Release -f net8.0 -- job default --runtimes net48 net6.0 net8.0 # x86, .NET 4.8 only -dotnet run -c Release -f net5.0 -- job default --runtimes net48 --platform x86 +dotnet run -c Release -f net8.0 -- job default --runtimes net48 --platform x86 ``` diff --git a/src/CenterEdge.Async/CenterEdge.Async.csproj b/src/CenterEdge.Async/CenterEdge.Async.csproj index 9300579..38d8f36 100644 --- a/src/CenterEdge.Async/CenterEdge.Async.csproj +++ b/src/CenterEdge.Async/CenterEdge.Async.csproj @@ -12,11 +12,23 @@ snupkg true key.snk - + Copyright 2023 CenterEdge Software and original post authors at https://social.msdn.microsoft.com/Forums/en-US/163ef755-ff7b-4ea5-b226-bbe8ef5f4796/is-there-a-pattern-for-calling-an-async-method-synchronously?forum=async + CenterEdge Software,Brant Burnett + Assists in the (risky) process of blocking a synchronous method waiting for an asynchronous Task to complete. + async threadpool deadlocks + PackageIcon + README.md + Apache-2.0 + + + + + + diff --git a/src/CenterEdge.Async/icon.png b/src/CenterEdge.Async/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c494fed1d0c11c441a0b47894fcc03102d37ce02 GIT binary patch literal 8476 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 Date: Sun, 10 Dec 2023 10:11:33 -0500 Subject: [PATCH 2/2] oops --- src/CenterEdge.Async/CenterEdge.Async.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CenterEdge.Async/CenterEdge.Async.csproj b/src/CenterEdge.Async/CenterEdge.Async.csproj index 38d8f36..1fe2e2d 100644 --- a/src/CenterEdge.Async/CenterEdge.Async.csproj +++ b/src/CenterEdge.Async/CenterEdge.Async.csproj @@ -17,7 +17,7 @@ CenterEdge Software,Brant Burnett Assists in the (risky) process of blocking a synchronous method waiting for an asynchronous Task to complete. async threadpool deadlocks - PackageIcon + icon.png README.md Apache-2.0