public static STask <STask> WhenAny(params STask[] tasks) { var sTaskCompletionSource = new STaskCompletionSource <STask>(); foreach (var task in tasks) { RunSTask(sTaskCompletionSource, task).Coroutine(); } return(sTaskCompletionSource.Task); async SVoid RunSTask(STaskCompletionSource <STask> tcs, STask task) { await task; if (!tcs.IsCompleted) { tcs.SetResult(task); } } }
public static STask WhenAll(params STask[] tasks) { var count = tasks.Length; var sTaskCompletionSource = new STaskCompletionSource(); foreach (var task in tasks) { RunSTask(sTaskCompletionSource, task).Coroutine(); } return(sTaskCompletionSource.Task); async SVoid RunSTask(STaskCompletionSource tcs, STask task) { await task; count--; if (count == 0) { tcs.SetResult(); } } }