【发布时间】:2013-02-25 07:58:54
【问题描述】:
AFAIK,它所知道的是,在某个时候,它的 SetResult 或 SetException 方法被调用以完成通过其 Task 属性公开的 Task<T>。
换句话说,它充当Task<TResult> 及其完成的生产者。
我看到here的例子:
如果我需要一种异步执行
Func<T>并拥有Task<T>的方法 表示该操作。
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
如果我没有Task.Factory.StartNew,可以使用哪个 -
但我确实有Task.Factory.StartNew。
问题:
有人可以举例说明一个与TaskCompletionSource直接相关的场景吗?
而不是我没有Task.Factory.StartNew的假设情况?
【问题讨论】:
-
TaskCompletionSource 主要用于在不创建新线程的情况下将基于事件的异步 api 与 Task 包装起来。
标签: c# .net .net-4.0 task-parallel-library taskcompletionsource