是否可以从某个方法返回任务,该方法首先调用多个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(),
};
}
您可以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] 删除。
我来说两句