c# - 运行 Task.WhenAll(taks) 后如何从 Task 获取数据
问题描述
我有多个 Async 方法可以一个一个运行,但是当我使用 Task.WhenAll 时,我真的不知道如何得到结果。以下是我的异步方法
public async Task<IEnumerable<MyModel>> Method1Async()
{
return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod1Data());
}
//Here Method1Async().Result will get me the data but don't know how to get the result when I am using Task.WhenAll()
public async Task<IEnumerable<MyModel>> Method2Async()
{
return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod2Data());
}
public async Task<IEnumerable<MyModel>> Method3Async()
{
return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod3Data());
}
这是我使用 Task.WhenAll 的代码
public async Task GetDataAsync()
{
Task[] tasks = new Task[3];
tasks[0] = Method1Async();
tasks[1] = Method2Async();
tasks[2] = Method2Async();
await Task.WhenAll(tasks).ConfigureAwait(false);
}
现在如果我打电话
获取数据异步()
方法,我一切正常,但不知道如何从返回的任务中获取结果?
解决方案
它将返回一个类型的数组,IEnumerable<MyModel>
因此您可以将异步方法的返回类型设置为:
public Task<IEnumerable<MyModel>[]> GetDataAsync()
{
Task[] tasks = new Task[3];
tasks[0] = staticDataService.Method1Async();
tasks[1] = staticDataService.Method2Async();
tasks[2] = staticDataService.Method3Async();
return Task.WhenAll(tasks);
}
然后消费它:
IEnumerable<MyModel>[] results = await GetDataAsync();
推荐阅读
- python - 未调用 Python 函数。只能打印我的打印语句中的问题
- django - Django 在退出视图或导航到与当前 URL 不同的 URL 时运行函数
- c - 查找数组中的哪些值至少出现 x 次
- d3.js - 在 D3 中可视化来自不同 csv 文件的数据
- html - 页面内容不会在具有 RTL 属性的移动视图中显示为全宽
- jquery - 在“422(无法处理的实体)”Laravel7 中验证错误时出现错误
- javascript - 未捕获的 ReferenceError:未定义 mahi
- python - 如何在临时变量中设置一个大的 Numpy 来编写视频?
- google-cloud-platform - 无法从文件“/root/.google_libcloud_auth.gcp-cm-tool”中读取缓存的身份验证令牌
- azure-sqldw - Azure Synapse:将一个 n 长度的分隔列表列转换为 n 个不同的列