首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候应该使用TaskCompletionSource<T>?

什么时候应该使用TaskCompletionSource<T>?
EN

Stack Overflow用户
提问于 2013-03-10 06:24:41
回答 10查看 103.7K关注 0票数 227

它所知道的就是,在某个时刻,它的SetResultSetException方法被调用,以完成通过其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的假设情况相关

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15316613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档