コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
ファイル: STask.WhenAll.cs プロジェクト: qq362946/STask
        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();
                }
            }
        }