11
什么时候应该使用TaskCompletionSource <T>?
AFAIK,它所知道的只是在某个时候,它的SetResult或SetException方法被调用以Task<T>通过其Task属性完成公开。 换句话说,它充当a Task<TResult>及其完成的生产者。 我在这里看到了示例: 如果我需要一种异步执行Func并有一个Task来表示该操作的方法。 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?