最佳答案
AFAIK,它所知道的只是在某些时候,它的SetResult
或SetException
方法被调用来完成通过其Task
属性暴露的Task<T>
。
换句话说,它充当Task<TResult>
及其完成过程的生产者。
我看到这里<强> < / >强的例子:
如果我需要一种方法来异步执行
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
?< / p >