using System.Threading.Tasks;
public static void Main()
DoIt().GetAwaiter().GetResult();
public async static Task DoIt()
var results = await Task.WhenAll(
RunTimeLimitedTask(1000));
foreach(var result in results) Console.WriteLine(result);
public async static Task<string> RunTimeLimitedTask(int timeLimit)
var source = new CancellationTokenSource();
source.CancelAfter(timeLimit);
await Task.Run(async () => await Task.Delay(500, source.Token));
catch (TaskCanceledException) {