翼度科技»论坛 编程开发 .net 查看内容

Task的基本概念、使用方法和实例代码

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
基本概念

是一种用于异步编程的概念。Task的重要特点是可以在后台执行方法或操作,而不会阻塞主线程或UI线程。
封装的异步操作,表示执行的操作正在进行。可以表示一个方法的返回值或者表示执行的操作已经完成。
Task类的主要成员


    • 属性:TaskStatus、IsCanceled、IsCompleted、IsFaulted、Exception等
    • 方法:Start()、RunSynchronously()、Wait()、WaitAll()、WaitAny()等
    • 事件:Completed、Canceled、Faulted等

Task的使用方法


    • 使用Task.Factory.StartNew()创建Task


    • 异步运行一个方法或Lambda表达式,立即返回Task对象,然后异步执行方法或Lambda表达式


    • 使用Task.Run()创建Task
    • 使用TaskCompletionSource创建Task


    • TaskCompletionSource是一个类,允许我们手动创建并控制异步返回值的Task对象。通常,异步操作的返回值是在异步操作完成时由异步方法设置的,但如果需要手动设置异步操作的返回值,可以使用TaskCompletionSource


    • Task的等待和结果获取


    • Task.Wait()、Task.Result或await关键字来等待Task对象完成并获取异步操作结果


    • 案例

  1. #region 等待异步完成
  2. Task<int> task = Task.Run(() =>
  3.                           {
  4.     Console.WriteLine("Task Run");
  5.     return 42;
  6. });
  7. task.Wait();
  8. int result = await task;
  9. Console.WriteLine(result);
  10. int result1 = task.Result;
  11. Console.WriteLine(result1);
  12. #endregion
复制代码
 

    • Task的示例代码

  1. //并行编程
  2. Parallel.For(1, 100, i =>
  3. {
  4.     Console.WriteLine($"Task {i} is running");
  5. });
  6. //异步编程
  7. Task.Run(() =>
  8. {
  9.     Console.WriteLine("异步执行任务");
  10. });
  11. //Task.WhenAll示例代码
  12. List<Task> tasks = new List<Task>();
  13. for (int i = 0; i < 10; i++)
  14. {
  15.     int index = i;
  16.     tasks.Add(Task.Run(() =>
  17.     {
  18.         Console.WriteLine($"Task {index} is running");
  19.     }));
  20. }
  21. Task.WhenAll(tasks).Wait();
复制代码
 
 
点击查看代码 ``` ```
来源:https://www.cnblogs.com/xiaoxi888/archive/2023/07/12/17547145.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具