異步編程代碼記錄
阿新 • • 發佈:2018-09-22
eat 所有 一次 true 請求 sleep work .get for
1 #region 每個思考時間完成以後發送指定的數據量,不管服務器是否處理完 2 3 for (int i = 0; i < _threadNumber; i++) 4 { 5 Task.Factory.StartNew(new Action<object>(t => 6 { 7 PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},Starting Process {i}"); 8 Do((int)t); 9 }), i); 10 } 11 12 #endregion 13 14 #region 發送N次請求以後等待所有線程完成,等服務器處理完所有的請求後,再執行下一次發送 15//var tasks = new List<Task<Tuple<int, bool>>>(); 16 //for (int i = 0; i < _threadNumber; i++) 17 //{ 18 // PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},Starting Process {i}");19 // tasks.Add(DoAsync(i)); 20 //} 21 22 //foreach (var task in Task.WhenAll(tasks).GetAwaiter().GetResult()) 23 //{ 24 // if (task.Item2) 25 // { 26 // PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},Ending Process {task.Item1}:{task.Item2}"); 27 // } 28 //} 29 #endregion
1 public void Do(int i) 2 { 3 PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},working..{i}"); 4 Thread.Sleep(1000); 5 PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},worked..{i}"); 6 } 7 8 9 public async Task<Tuple<int, bool>> DoAsync(int i) 10 { 11 PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},working..{i}"); 12 await Task.Delay(3000); 13 PrintLog($@"ThreadId:{Thread.CurrentThread.ManagedThreadId},worked..{i}"); 14 return Tuple.Create(i, true); 15 }
異步編程代碼記錄