C# Asynchronous Libraries Benchmarks

December 21, 2025 ยท View on GitHub

This project is built to benchmark C# asynchronous libraries against each other.

These benchmarks are ran using BenchmarkDotNet.

This is a non-exhaustive benchmark of each library's features. It is only meant to compare the most common use scenario (awaiting an asynchronous result). Some libraries provide more/different features than others.

Asynchronous libraries benchmarked:

To run the benchmarks on your machine:

  1. Run RunAllBenchmarks.bat (or run a script individually for each runtime in the Scripts directory).
  2. See your results in the generated Scripts/BenchmarkDotNet.Artifacts directory.

Note: Some functions are not actually supported in some libraries (like RSG does not support async/await), so they will show as NA or ?. Callbacks are measured the same for each benchmark as a baseline to compare against, and does not mean you can actually use async/await or ContinueWith with them.

ContinueWith is either using the .ContinueWith API or .Then API, depending on each library.

.Net 10.0 Benchmarks

BenchmarkDotNet v0.16.0-nightly.20251220.380, Windows 10 (10.0.19045.6466/22H2/2022Update)
AMD Ryzen 7 9800X3D 4.70GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.100
  [Host]     : .NET 10.0.0 (10.0.0, 10.0.25.52411), X64 RyuJIT x86-64-v4
  DefaultJob : .NET 10.0.0 (10.0.0, 10.0.25.52411), X64 RyuJIT x86-64-v4
TypeMethodPendingMeanRatioAllocatedPooled
AsyncAwaitCallbackFalse42.28 ns1.00832 B-
AsyncAwaitProtoPromiseFalse16.49 ns0.39--
AsyncAwaitRsgPromiseFalseNA?NANA
AsyncAwaitTaskFalse32.36 ns0.77192 B-
AsyncAwaitUniTaskFalse33.75 ns0.80--
AsyncAwaitUnityFxAsyncFalse44.41 ns1.05360 B-
AsyncAwaitValueTaskFalse33.21 ns0.79--
AsyncAwaitCallbackTrue51.69 ns1.00832 B-
AsyncAwaitProtoPromiseTrue326.92 ns6.33-600 B
AsyncAwaitRsgPromiseTrueNA?NANA
AsyncAwaitTaskTrue405.42 ns7.841120 B-
AsyncAwaitUniTaskTrue373.51 ns7.23-720 B
AsyncAwaitUnityFxAsyncTrue366.40 ns7.091952 B-
AsyncAwaitValueTaskTrue492.82 ns9.531352 B-
ContinueWithCallbackFalse42.34 ns1.00832 B-
ContinueWithProtoPromiseFalse78.77 ns1.86--
ContinueWithRsgPromiseFalse74.19 ns1.751032 B-
ContinueWithTaskFalse300.68 ns7.101224 B-
ContinueWithUniTaskFalse81.72 ns1.93--
ContinueWithUnityFxAsyncFalse238.66 ns5.641304 B-
ContinueWithValueTaskFalseNA?NANA
ContinueWithCallbackTrue51.92 ns1.00832 B-
ContinueWithProtoPromiseTrue312.85 ns6.03-312 B
ContinueWithRsgPromiseTrue790.59 ns15.2310104 B-
ContinueWithTaskTrue527.94 ns10.171864 B-
ContinueWithUniTaskTrue522.47 ns10.06-1272 B
ContinueWithUnityFxAsyncTrue364.54 ns7.021560 B-
ContinueWithValueTaskTrueNA?NANA