Program.cs
using BenchmarkDotNet.Running;
namespace Benchmarks
{
class Program
{
static void Main()
{
BenchmarkRunner.Run<AsyncMethods>();
}
}
}AsyncMethods.cs
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
namespace Benchmarks
{
public class AsyncMethods
{
[Benchmark(Baseline = true)]
public Task SimpleReturnTask()
{
return Tasks.SimpleReturnTask1();
}
[Benchmark]
public Task AsyncReturnTask()
{
return Tasks.AsyncReturnTask1();
}
}
public static class Tasks
{
public static Task SimpleReturnTask1() => SimpleReturnTask2();
private static Task SimpleReturnTask2() => SimpleReturnTask3();
private static Task SimpleReturnTask3() => SimpleReturnTask4();
private static Task SimpleReturnTask4() => Task.CompletedTask;
public static async Task AsyncReturnTask1() => await AsyncReturnTask2();
private static async Task AsyncReturnTask2() => await AsyncReturnTask3();
private static async Task AsyncReturnTask3() => await AsyncReturnTask4();
private static async Task AsyncReturnTask4() => await Task.CompletedTask;
}
}// results:
BenchmarkDotNet=v0.10.14, OS=Windows 10.0.16299.371 (1709/FallCreatorsUpdate/Redstone3)
Intel Core i7-6700HQ CPU 2.60GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
Frequency=2531255 Hz, Resolution=395.0609 ns, Timer=TSC
.NET Core SDK=2.1.200-preview-007576
[Host] : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT
DefaultJob : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT| Method | Mean | Error | StdDev | Scaled | ScaledSD |
|---|---|---|---|---|---|
| SimpleReturnTask | 1.824 ns | 0.0503 ns | 0.0470 ns | 1.00 | 0.00 |
| AsyncReturnTask | 96.270 ns | 0.7585 ns | 0.6723 ns | 52.82 | 1.39 |