C# TaskCompletionSource 异步操作处理

TaskCompletionSource<bool>用于手动控制任务的状态

任务状态设置

1.设置为完成 (SetResult):

当异步操作成功完成时调用 SetResult(true)。这表明任务成功完成,并不会有异常发生。在你的场景中,这通常是在页面导航成功完成后设置。

2.设置为失败 (SetException):

当异步操作失败或出现异常时,调用 SetException(Exception)。这用于向任务的调用者抛出异常。在页面加载失败时,你可以使用这个方法。

3.不需要显式设置为取消 (SetCanceled)

除非你要处理取消操作(如用户手动停止加载)。如果需要,这可以通过捕获取消请求并调用 SetCanceled 来实现

 

在循环中进行任务状态控制。例如在循环中需要控制上一个任务完成后才能进行下一轮循环,且没法获取等待状态。

//定义字典

private Dictionary<string, TaskCompletionSource<bool>> navigationTasks;

foreach(JObject Obj in arrData)
{

var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);//这里建议交给线程池管理
navigationTasks[code] = tcs;

//这里执行需要执行的异步但是没法获取等待状态的 函数

asyncAction();

try
{
await navigationTasks["xxxxxx"].Task; // 等待完成
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

//在asyncAction中如果事务处理完毕

navigationTasks["xxxx"].SetResult(true);

 

posted @   一步一个坑  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示