Created
November 12, 2019 09:32
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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