You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TaskCompletionSource将其所创建任务的状态设置为Running

TaskCompletionSource创建的任务设置Running状态的解决方案

TaskCompletionSource(简称TCS)生成的是Promise风格任务,默认没有绑定到实际执行的委托逻辑,所以原生生命周期中不会自动进入TaskStatus.Running状态,该状态默认仅分配给已经被调度器启动、正在执行委托的常规任务。

解决方案1:调整任务状态检测逻辑(最推荐)

原有仅检测Running状态的规则兼容性不足,你可以修改检测逻辑为:只要任务状态不属于Faulted/Canceled/RanToCompletion三种已结束状态,就判定任务处于执行中,该规则可以同时兼容常规任务和TCS任务的场景,无需修改原有TCS的使用逻辑。

解决方案2:使用.NET 5+ 新增的API手动设置Running状态

如果你使用的是.NET 5及以上版本,TCS已经提供了手动设置Running状态的方法,直接调用即可:

// 初始化TCS
var tcs = new TaskCompletionSource<YourResultType>();

// 当你实际的任务逻辑开始执行时,调用该方法将任务设为Running状态
tcs.TrySetRunning();

// 逻辑执行完成后再设置最终状态
if(执行成功)
{
    tcs.SetResult(你的结果);
}
else if(被取消)
{
    tcs.SetCanceled();
}
else
{
    tcs.SetException(异常实例);
}

低版本.NET兼容方案

如果你使用的是.NET Framework或者.NET Core 3.1及更低版本,没有TrySetRunning这个API,又无法修改状态检测逻辑,可以自定义任务封装类,额外添加自定义的运行状态标记,替换原有对原生Task.Status的检测逻辑即可,不要为了强制设置状态额外分配线程池资源,避免不必要的性能损耗。


内容的提问来源于stack exchange,提问作者Tobias Knauss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:51:01