c# – 不等待lambda foreach中的异步调用
发布时间:2020-12-15 23:23:51 所属栏目:百科 来源:网络整理
导读:我有以下方法在完成之前返回(方法为简洁而减少): private void ProcessAllItems(ListItem items){ items.ForEach(async item = { var response = await Processor.IOBoundTaskAsync(item); // Some further processing on the response object. });} Proces
我有以下方法在完成之前返回(方法为简洁而减少):
private void ProcessAllItems(List<Item> items) { items.ForEach(async item => { var response = await Processor.IOBoundTaskAsync(item); // Some further processing on the response object. }); } Processor.IOBoundTaskAsync方法返回Task< SomeResponSEObject>,因此不是void. 那么,发生了什么? 我希望lambda foreach一次处理一个项目,所以不能并行处理.对于第一次迭代,代码进入IOBoundTaskAsync并获取第一个“await”(它调用4个等待的Web服务方法中的第一个),然后调用方法“ProcessAllItems”退出. 我只使用测试数据,因此我的列表中只有1个项目. 我错过了什么? 解决方法List<T>.ForEach 将您的异步lambda转换为异步void,因为它接受Action< T>.虽然它确实存在并且在异常处理方面存在一些复杂性,但您的ForEach调用应该可以正常工作.如果没有,您可能没有正确使用异步模式.我建议你在第一次等待之后设置一个断点,看看继续执行.
我会建议你使用常规的foreach: private async Task ProcessAllItemsAsync(List<Item> items) { foreach (var item in items) { var response = await Processor.IOBoundTaskAsync(item); // Some further processing on the response object. } } 阅读How can I use Async with ForEach?了解更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |