示例#1
0
        public static async ETTask <bool> WaitAny(ETTask[] tasks, ETCancellationToken cancellationToken = null)
        {
            if (tasks.Length == 0)
            {
                return(false);
            }

            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(2);

            foreach (ETTask task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            async ETVoid RunOneTask(ETTask task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }

            await coroutineBlocker.WaitAsync();

            if (cancellationToken == null)
            {
                return(true);
            }

            return(!cancellationToken.IsCancel());
        }
示例#2
0
        public static async ETTask <bool> WaitAll(List <ETTask> tasks, ETCancellationToken cancellationToken = null)
        {
            if (tasks.Count == 0)
            {
                return(false);
            }

            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(tasks.Count + 1);

            foreach (ETTask task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async ETVoid RunOneTask(ETTask task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }

            if (cancellationToken == null)
            {
                return(true);
            }

            return(!cancellationToken.IsCancel());
        }
示例#3
0
        public static async ETTask WaitAll(ETTask[] tasks)
        {
            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(tasks.Length + 1);

            foreach (ETTask task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async ETVoid RunOneTask(ETTask task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }
        }
示例#4
0
        public static async ETTask WaitAny <T>(ETTask <T>[] tasks)
        {
            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(2);

            foreach (ETTask <T> task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async ETVoid RunOneTask(ETTask <T> task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }
        }
示例#5
0
        public static async CFTask WaitAll <T>(CFTask <T>[] tasks)
        {
            if (tasks == null || tasks.Length == 0)
            {
                return;
            }
            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(tasks.Length + 1);

            foreach (CFTask <T> task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async CFVoid RunOneTask(CFTask <T> task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }
        }
示例#6
0
        public static async CFTask WaitAll(List <CFTask> tasks)
        {
            if (tasks == null || tasks.Count == 0)
            {
                return;
            }
            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(tasks.Count + 1);

            foreach (CFTask task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async CFVoid RunOneTask(CFTask task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }
        }
示例#7
0
        public static async ETTask WaitAny(ETTask[] tasks)
        {
            if (tasks == null || tasks.Length == 0)
            {
                return;
            }

            CoroutineBlocker coroutineBlocker = new CoroutineBlocker(2);

            foreach (ETTask task in tasks)
            {
                RunOneTask(task).Coroutine();
            }

            await coroutineBlocker.WaitAsync();

            async ETVoid RunOneTask(ETTask task)
            {
                await task;
                await coroutineBlocker.WaitAsync();
            }
        }