• WhenAll 与 WaitAll 的区别


         #region   async    Task    await
            /// <summary>
            /// commit
            /// </summary>
            /// <param name="mallCode">code</param>
            /// <returns>json</returns>
            [HttpGet]
            public async Task<ResultDataModel<JObject>> TaskTest(string mallCode)
            {
    
    
                var gameQQ = GameQQ(1, 2);
                var gameWX = GameWX(1, 2);
                var gameLOL = GameLOL(1, 2);
    
                var breakfastTasks = new List<Task> { gameQQ, gameWX, gameLOL };
                //while (breakfastTasks.Count > 0)
                //{
                //    Task finishedTask = await Task.WhenAny(breakfastTasks);//任何提供的任务已完成时,创建将完成的任务。  WhenAll
                //    if (finishedTask == gameQQ)
                //    {
                //        System.Diagnostics.Debug.WriteLine("gameQQ 开完");
                //    }
                //    else if (finishedTask == gameWX)
                //    {
                //       System.Diagnostics.Debug.WriteLine("GameWX 发完");
                //    }
                //    else if (finishedTask == gameLOL)
                //    {
                //       System.Diagnostics.Debug.WriteLine("GameLOL 打完");
                //    }
                //    breakfastTasks.Remove(finishedTask);
                //}
    
    
    
    
                //主线程(当前请求)等和不等的区别  ,返回值为Task
                //Task.WhenAll(breakfastTasks);
                //await Task.WhenAll(breakfastTasks);
    
    
                Task.WaitAll(breakfastTasks.ToArray()); //与 WhenAll 相比,返回值为void 。和写了  await 的WhenAll 没有区别
                int asd = 0;//其他代码
    
                return StateMessage.GetSuccess("1000", "",  new JObject());
    
            }
    
            private async Task<int> GameQQ(int password,int account)
            {
                await Task.Delay(3000);
               System.Diagnostics.Debug.WriteLine("GameQQ");
                return 0;
            }
            private async Task<int> GameWX(int password, int account)
            {
                await Task.Delay(1000);
               System.Diagnostics.Debug.WriteLine("GameWX");
                return 1;
            }
    
    
            private async Task<int> GameLOL(int password, int account)
            {
                await Task.Delay(500);
               System.Diagnostics.Debug.WriteLine("GameLOL");
                return 2;
            }
    
    
            #endregion
    

      WaitAll  为 void ,WhenAll 为 task。 用法无区别

  • 相关阅读:
    人机博弈,吃子棋游戏(一)基本介绍
    cesm下载备注
    mysql数据库批量高速插入
    持续学习
    顺序表的功能实现
    Broccoli &amp; Babel使用演示样例
    rk3188调试记录
    Operation not allowed on a unidirectional dataset错误?
    dbExpress操作中用TDBGrid显示数据
    dbexpress连接mysql提示Operation not allowed on a unidirectional dataset
  • 原文地址:https://www.cnblogs.com/j2ee-web-01/p/13743858.html
Copyright © 2020-2023  润新知