它所知道的就是,在某个时刻,它的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
的假设情况相关
https://stackoverflow.com/questions/15316613
复制相似问题