0 .net c# latency task async-await
我正在编写一段代码,从一个来源获取数据,进行一些处理,然后将其保存到不同的来源。由于两端的延迟水平很高,我尝试使用 async/await 等待加载和保存操作完成。理想情况下,这将启动所有输入任务,当每个任务完成时,它会进行一些快速处理,然后启动输出任务 - 使用 Task.WaitAll 会导致程序在新任务开始时不做任何事情。
由于第二个异步任务取决于第一个的结果,我无法弄清楚如何处理第二个等待,让它恢复处理第一个等待的其他结果 - 一旦结果被处理,第二个等待被击中,它会完全阻塞,直到保存功能完成,而不是继续处理其他结果。我正在尝试这样的事情,我做错了什么?
async Task MainAsync()
{
/* gets a list of id's */
var dataRequests = ids.Select(id => LoadEntryById(id)).ToList();
foreach(var request in dataRequests)
{
RawEntry response = await request;
ProcessedEntry result = doSomething(response);
await SaveResult(result);
}
}
async Task<RawEntry> LoadEntryById(int id)
{
/* IO task */
}
async Task SaveResult(ProcessedEntry result)
{
/* IO task */
}
Run Code Online (Sandbox Code Playgroud)
不要等待单个方法,而是List<Task>使用延续创建您的方法,然后使用Task.WhenAll:
var tasks = ids.Select(async id => {
var response = await LoadEntryById(id);
var result = doSomething(response);
await SaveResult(result);
}).ToList();
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)
这将以异步方式处理您的所有任务。
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |