c# – 不等待lambda foreach中的异步调用

c# – 不等待lambda foreach中的异步调用,第1张

概述我有以下方法在完成之前返回(方法为简洁而减少): private void ProcessAllItems(List<Item> items){ items.ForEach(async item => { var response = await Processor.IOBoundTaskAsync(item); // Some further p 我有以下方法在完成之前返回(方法为简洁而减少):

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?了解更多信息.

总结

以上是内存溢出为你收集整理的c# – 不等待lambda foreach中的异步调用全部内容,希望文章能够帮你解决c# – 不等待lambda foreach中的异步调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1219584.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存