Task.WhenAll 示例

        public async Task<bool> GetVAsyncs() {
            var ms = new List<int>() { 2000, 3000, 1000, 2000, 3000, };
            var tasks = new List<Task<bool>>() { };
            ms.ForEach(x => tasks.Add(GetVAsync(x)));
            bool[] ret = await Task.WhenAll(tasks.ToArray());
            return ret.All(x => x == true);
        }

        /// <summary>
        /// 正确示范 不确定就用Task.Run包起来,总没错。
        /// </summary>
        /// <param name="delayMs"></param>
        /// <returns></returns>
        public async Task<bool> GetVAsync(int delayMs) {
            bool ret = await Task.Run(() => 
                Task.Run(() =>
                    Task.Run(() =>
                        Task.Run(() => {
                            Thread.Sleep(delayMs);
                            return true;
                        })
                    )
                )
            );
            return ret;
        }

        /// <summary>
        /// 错误示范,线程永远不会执行。
        /// </summary>
        /// <param name="delayMs"></param>
        /// <returns></returns>
        public async Task<bool> GetVAsync2(int delayMs) {
            await new Task<bool>(() => {
                Thread.Sleep(delayMs);
                return true;
            });
            return true;
        }

 

posted @ 2022-09-01 09:41  enif  阅读(78)  评论(0编辑  收藏  举报
豫ICP备2021034901号