查看: 8|回复: 0

TaskCompletionSource设置线程执行状态

[复制链接]

272

主题

1

回帖

1413

积分

管理员

积分
1413
QQ
发表于 2025-9-14 09:04:46 | 显示全部楼层 |阅读模式
简单来说,TaskCompletionSource是一种允许我们创建未绑定Task的类型,这意味着它不与委托绑定。这让您可以手动控制任务完成的时间和方式。您可以手动设置任务的结果,或者发出信号表示任务由于取消或错误而完成。





  1.   static async Task demo4()
  2.   {
  3.       var result =await  UpLoadFile();
  4.       Console.WriteLine($"结果是{result}");

  5.   }

  6.   static Task<bool> UpLoadFile()
  7.   {
  8.       var source = new TaskCompletionSource<bool>();
  9.       try
  10.       {
  11.           Task.Run(async () =>
  12.           {
  13.               Console.WriteLine($"开始下载");
  14.               await Task.Delay(5000);
  15.               Console.WriteLine($"完成下载");
  16.               //设置成功
  17.               source.SetResult( true );
  18.           });
  19.       }
  20.       catch (Exception ex)
  21.       {
  22.           //设置失败
  23.           source.SetResult(false);
  24.       }
  25.       return source.Task;
  26.   }

复制代码
TaskCompletionSource 还可以用于实现任务的暂停和恢复。通过手动控制任务的完成状态,我们可以在特定条件下暂停任务,并在条件满足时恢复任务。我们使用 TaskCompletionSource 来实现任务的暂停和恢复。当用户按下任意键时,任务将从暂停状态恢复并继续执行。


  1. using System;
  2. using System.Threading.Tasks;

  3. public class PauseExample
  4. {
  5.     private static TaskCompletionSource<bool> _pauseTcs;

  6.     public static async Task Main(string[] args)
  7.     {
  8.         _pauseTcs = new TaskCompletionSource<bool>();

  9.         Task longRunningTask = LongRunningOperationAsync();

  10.         Console.WriteLine("按任意键继续...");
  11.         Console.ReadKey();
  12.         _pauseTcs.SetResult(true); // 恢复任务

  13.         await longRunningTask;
  14.         Console.WriteLine("任务完成!");
  15.     }

  16.     public static async Task LongRunningOperationAsync()
  17.     {
  18.         Console.WriteLine("任务开始...");

  19.         await _pauseTcs.Task; // 等待任务恢复

  20.         Console.WriteLine("任务恢复,继续执行...");
  21.         // 模拟更多工作
  22.         await Task.Delay(2000);

  23.         Console.WriteLine("任务结束。");
  24.     }
  25. }


复制代码

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

关于我们

企业文化

人才招聘

常见问题

建议反馈

合作伙伴

商务合作

新闻媒体

产品服务

客户案例

联系我们

联系电话:14776878570(同VX号)

邮箱:14776878570@163.com(同VX号)

工作时间:周一至周六(早上8点至下午10点)

关注微信公众号

QQ|Archiver|手机版|小黑屋|鸿翔机器人

GMT+8, 2025-9-22 06:21 , Processed in 0.054439 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.