【发布时间】:2016-07-23 23:29:31
【问题描述】:
void A()
{
foreach (var document in documents)
{
var res = records.BulkWriteAsync(operationList, writeOptions); // res is Task<BulkWriteResult<JobInfoRecord>>
}
}
foreach之后我想等待所有BulkWriteAsync的结果,怎么办?我不想将A() 标记为async 并执行以下操作
await records.BulkWriteAsync(operationList, writeOptions);
这是好的解决方案吗?
void A()
{
var tasks = new List<Task<BulkWriteResult<JobInfoRecord>>>();
foreach (var document in documents)
{
var task = records.BulkWriteAsync(operationList, writeOptions);
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
如果我将public async void A() 标记为async,我将在try catch 中调用A() 我永远不会在catch 中
【问题讨论】:
-
所以你只想等待最后一次操作的结果还是什么?你为什么不想让
Aasync?异步调用链应该尽可能地异步。 -
下次你应该在问题中清楚地表达你想要达到的目标。这就是为什么发布minimal reproducible example 总是一个好主意。
-
您仍然没有说明为什么不适合您使用
async方法。在处理异步代码时,它确实应该是默认值。 -
这只是意味着在某些时候,您在没有正确处理孤立的
Task的情况下破坏了await链。你为什么这样做?你在使用async void方法吗?别。如果您不需要返回任何数据,请改用async Task。 -
我添加了更多信息。
标签: c# async-await