.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
					
public class Program
{
	public static void Main()
	{
		var sw = Stopwatch.StartNew();
		var f1 = Foo("f1");
		var f2 = Foo("f2");
		Task.WhenAll(f1,f2).Wait();
		Console.WriteLine($"2 таски * 5 циклов * 250мс на цикл = {sw.ElapsedMilliseconds}мс");
	
		sw = Stopwatch.StartNew();
		var b1 = Bar("b1");
		var b2 = Bar("b2");
		Task.WhenAll(b1,b2).Wait();
		Console.WriteLine($"2 таски * 5 циклов * 250мс на цикл = {sw.ElapsedMilliseconds}мс");
	}


	static async Task Foo(string id){
		for(int i=0; i< 5; i++){
			await Task.Delay(250);
			(id + ". Thread:" + Thread.CurrentThread.ManagedThreadId).Dump();
		}
	}

	static Task Bar(string id){
		for(int i=0; i< 5; i++){
			Thread.Sleep(250);
			(id + ". Thread:" + Thread.CurrentThread.ManagedThreadId).Dump();
		}
		return Task.CompletedTask;
	}
}
;