Skip to content

Instantly share code, notes, and snippets.

@Meir017
Last active April 24, 2018 20:40
Show Gist options
  • Select an option

  • Save Meir017/6ea04df355120919076c1dc4337e0101 to your computer and use it in GitHub Desktop.

Select an option

Save Meir017/6ea04df355120919076c1dc4337e0101 to your computer and use it in GitHub Desktop.
C# return tasks

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment