首页 新闻 会员 周边

C# 中 TaskCompletionSource 的用途是什么

0
悬赏园豆:50 [已解决问题] 解决于 2019-04-16 14:09

昨天阅读 corefx 中 System.Data.SqlClient 的源代码 SqlDataReader.cs 时发现用到了 TaskCompletionSource

TaskCompletionSource<bool> source = new TaskCompletionSource<bool>();
Task original = Interlocked.CompareExchange(ref _currentTask, source.Task, null);
if (original != null)
{
    source.SetException(ADP.ExceptionWithStackTrace(SQL.PendingBeginXXXExists()));
    return source.Task;
}

请问 TaskCompletionSource 的用途是什么?在什么情况下会用到它?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2019-04-16 11:55
< >
分享
最佳答案
0

用途就是创建一个任务
IO密集型操作,生成一个任务会用到,

收获园豆:30
博学多思 | 初学一级 |园豆:76 | 2019-04-16 12:21

不是可以 new Task 吗?为什么要用 TaskCompletionSource 创建 Task ?

dudu | 园豆:30994 (高人七级) | 2019-04-16 12:50

@dudu: new Task 没办法设置Task结果啊

博学多思 | 园豆:76 (初学一级) | 2019-04-16 13:35

阅读 The Nature of TaskCompletionSource 之后进一步解惑

dudu | 园豆:30994 (高人七级) | 2019-04-16 14:10
dudu | 园豆:30994 (高人七级) | 2019-04-21 12:58

Using Async with ManualResetEventSlim 这篇博文中基于 TaskCompletionSource 实现了 AsyncManualResetEvent

dudu | 园豆:30994 (高人七级) | 2019-05-01 10:06
其他回答(1)
0
收获园豆:20
会长 | 园豆:12401 (专家六级) | 2019-04-16 13:57

TaskCompletionSource<T>这是一种受你控制创建Task的方式。你可以使Task在任何你想要的时候完成,你也可以在任何地方给它一个异常让它失败。

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2019-04-16 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册