如何不等待就返回Task <T>

汤姆·瓦斯特

是否可以从某个方法返回任务,该方法首先调用多个Task<T>返回方法,然后返回某种类型,该类型包括先前调用的结果而无需使用await

例如,以下内容很简单:

public Task<SomeType> GetAsync() => FirstOrDefaultAsync();

但是,我想做这样的事情:

public Task<SomeType> GetAsync()
{
    var list = GetListAsync();   // <-- Task<List<T>>
    var count = GetCountAsync(); // <-- Task<int>

    return new SomeType // <-- Obviously compiler error
    {
        List  /* <-- List<T> */ = list,  // <-- Also compiler error
        Count /* <-- int     */ = count, // <-- Also compiler error
    };
}

是否可以这样做而无需编写:

public async Task<SomeType> GetAsync()
{
    return new Type2
    {
        List = await GetListAsync(),
        Count = await GetCountAsync(),
    };
}
阿拉·马苏德(Alaa Masoud)

您可以Task.WhenAll与一起使用Task.ContinueWith

public Task<SomeType> GetAsync()
{
    var list = GetListAsync();
    var count = GetCountAsync();

    return Task.WhenAll(list, count).ContinueWith(_ => new Type2
    {
        List = list.Result,
        Count = count.Result,
    });
}

编辑

如评论中所建议,最好使用await我还建议阅读由GSerg链接的帖子-非异步方法与使用异步/等待中Task.ContinueWith的性能

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章