Skip to content

Instantly share code, notes, and snippets.

@giammin
Created November 12, 2019 09:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save giammin/5bdef975ef858cfc7e62d6e181d49613 to your computer and use it in GitHub Desktop.
Save giammin/5bdef975ef858cfc7e62d6e181d49613 to your computer and use it in GitHub Desktop.
test Task.WaitAll Task.WhenAll Awaiting multiple Tasks with different results Getting return values from Task.WhenAll
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace TestWhenAll.Console
{
public class Program
{
public static void Main(string[] args) => MainAsync(args).GetAwaiter().GetResult();
public static async Task<int> GetData(int time)
{
System.Console.WriteLine($"GetData({time}) START {DateTime.Now:s}");
await Task.Delay(time * 1000);
System.Console.WriteLine($"GetData({time}) STOP {DateTime.Now:s}");
return time;
}
private static async Task MainAsync(string[] args)
{
// first test
Stopwatch stopWatch = new Stopwatch();
System.Console.WriteLine("1 test");
stopWatch.Start();
int var1 = await GetData(3);
int var2 = await GetData(5);
int var3 = await GetData(10);
stopWatch.Stop();
System.Console.WriteLine($"End 1 - {var1} {var2} {var3} elapsed: {stopWatch.ElapsedMilliseconds}");
stopWatch.Reset();
System.Console.WriteLine("\n\n 2 test");
stopWatch.Start();
await Task.WhenAll(GetData(3), GetData(5), GetData(10));
var1 = await GetData(3);
var2 = await GetData(5);
var3 = await GetData(10);
stopWatch.Stop();
System.Console.WriteLine($"End 2 - {var1} {var2} {var3} elapsed: {stopWatch.ElapsedMilliseconds}");
stopWatch.Reset();
System.Console.WriteLine("\n\n3 test");
stopWatch.Start();
var t2GetData1 = GetData(3);
var t2GetData3 = GetData(5);
var t2GetData5 = GetData(10);
await Task.WhenAll(t2GetData1, t2GetData3, t2GetData5);
var2 = await t2GetData1;
var1 = await t2GetData3;
var3 = await t2GetData5;
stopWatch.Stop();
System.Console.WriteLine($"End 3 - {var1} {var2} {var3} elapsed: {stopWatch.ElapsedMilliseconds}");
stopWatch.Reset();
System.Console.WriteLine("\n\n4 test");
stopWatch.Start();
var t2GetData1b = GetData(3);
var t2GetData3b = GetData(5);
var t2GetData5b = GetData(10);
Task.WaitAll(new Task[]{t2GetData1b, t2GetData3b, t2GetData5b},CancellationToken.None);
var2 = await t2GetData1b;
var1 = await t2GetData3b;
var3 = await t2GetData5b;
stopWatch.Stop();
System.Console.WriteLine($"End 4 - {var1} {var2} {var3} elapsed: {stopWatch.ElapsedMilliseconds}");
stopWatch.Reset();
System.Console.WriteLine("\n\n 5 test");
stopWatch.Start();
//result order?
int[] results = await Task.WhenAll(GetData(10), GetData(5), GetData(3));
stopWatch.Stop();
System.Console.WriteLine($"End 5 - {results[0]} {results[1]} {results[2]} elapsed: {stopWatch.ElapsedMilliseconds}");
System.Console.ReadLine();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment