最佳答案
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 >