AFAIK,它所知道的就是在某个时刻,它的SetResult
或SetException
方法被调用,以完成通过其Task
属性公开的Task<T>
.
换言之,它充当了a 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
的话可以用-
Question:
有人能举例说明与directly到TaskCompletionSource
有关的场景吗