经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C# -- 使用 Task 执行多线程任务
来源:cnblogs  作者:在代码的世界里游走  时间:2018/12/24 10:43:21  对本文有异议

C# -- 使用 Task 执行多线程任务

1. 使用 Task 执行多线程任务

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Task task1 = new Task(() => {
  6. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  7. Stopwatch stw = new Stopwatch();
  8. stw.Start();
  9. long result = SumNumbers(10000000);
  10. stw.Stop();
  11. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  12. });
  13. Task task2 = new Task(() => {
  14. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  15. Stopwatch stw = new Stopwatch();
  16. stw.Start();
  17. long result = SumNumbers(20000000);
  18. stw.Stop();
  19. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  20. });
  21. Task task3 = new Task(() => {
  22. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  23. Stopwatch stw = new Stopwatch();
  24. stw.Start();
  25. long result = SumNumbers(15000000);
  26. stw.Stop();
  27. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  28. });
  29. task1.Start();
  30. task2.Start();
  31. task3.Start();
  32. Console.ReadKey();
  33. }
  34. static long SumNumbers(int count)
  35. {
  36. long sum = 0;
  37. for (int i = 0; i < count; i++)
  38. {
  39. sum += i;
  40. }
  41. Thread.Sleep(3000);
  42. return sum;
  43. }
  44. }

执行结果:

 

2. 等待Task多线程任务执行完成

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Task task1 = new Task(() => {
  6. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  7. Stopwatch stw = new Stopwatch();
  8. stw.Start();
  9. long result = SumNumbers(10000000);
  10. stw.Stop();
  11. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  12. });
  13. Task task2 = new Task(() => {
  14. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  15. Stopwatch stw = new Stopwatch();
  16. stw.Start();
  17. long result = SumNumbers(20000000);
  18. stw.Stop();
  19. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  20. });
  21. Task task3 = new Task(() => {
  22. Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
  23. Stopwatch stw = new Stopwatch();
  24. stw.Start();
  25. long result = SumNumbers(15000000);
  26. stw.Stop();
  27. Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
  28. });
  29. List<Task> listTask = new List<Task>();
  30. listTask.Add(task1);
  31. listTask.Add(task2);
  32. listTask.Add(task3);
  33. task1.Start();
  34. task2.Start();
  35. task3.Start();
  36. Task.WaitAll(listTask.ToArray());
  37. Console.WriteLine("所有线程执行完成。");
  38. Console.ReadKey();
  39. }
  40. static long SumNumbers(int count)
  41. {
  42. long sum = 0;
  43. for (int i = 0; i < count; i++)
  44. {
  45. sum += i;
  46. }
  47. Thread.Sleep(3000);
  48. return sum;
  49. }
  50. }

执行结果:

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号