当前位置: 首页 > 知识库问答 >
问题:

带有异步lambda的并行foreach

平学
2023-03-14

我想并行处理一个集合,但我在实现它时遇到了困难,因此我希望得到一些帮助。

var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, async item =>
{
  // some pre stuff
  var response = await GetData(item);
  bag.Add(response);
  // some post stuff
}
var count = bag.Count;
var bag = new ConcurrentBag<object>();
Parallel.ForEach(myCollection, item =>
{
  // some pre stuff
  var responseTask = await GetData(item);
  responseTask.Wait();
  var response = responseTask.Result;
  bag.Add(response);
  // some post stuff
}
var count = bag.Count;

foreach方法的原型采用操作 作为参数,但我希望它等待异步lambda。

共有1个答案

夔桐
2023-03-14

如果您只想要简单的并行性,可以这样做:

var bag = new ConcurrentBag<object>();
var tasks = myCollection.Select(async item =>
{
  // some pre stuff
  var response = await GetData(item);
  bag.Add(response);
  // some post stuff
});
await Task.WhenAll(tasks);
var count = bag.Count;

如果需要更复杂的内容,请查看Stephen Toub的ForeachAsync文章。

 类似资料:
  • 我需要有一个长时间运行的websocket客户端,它接收来自websocket服务器的推送消息,并且我需要监视客户端的连接状态:如果连接中断,我需要发现。 我的方法是定期记录一个常量字符串,如果没有检测到日志消息,就触发警报。 我的想法是:1)有一个websocket客户机来响应不定期传入的消息。2)同时有一个循环,当websocket客户机抛出一个ConnectionClosed exeptio

  • 我一直在尝试打字稿,但我现在有点卡在如何有效地使用async/wait上。 我正在向数据库中插入一组记录,我需要获得每次插入返回的ID列表。下面的简化示例一般来说是有效的,但它并不像我所希望的那么优雅,而且是完全连续的。 我试图使用来避免手动创建列表,但我可以让它工作。 我还希望有有限的并行性。因此,我的异步调用应该在一定的限制下并行进行,例如,我只希望有10个打开的请求,但不希望有更多。 有没有

  • 我有一个由S3推送事件触发的AWS Lambda。lambda将调用一个API,这将触发一个长时间运行的进程。我认识到我可以配置S3异步调用lambda函数,因此S3不会等待响应,但我很想知道我是否可以配置lambda异步调用我的API。我不希望lambda在过程完成时等待几分钟。有人能给我指出一些概述这个过程的留档吗?提前谢谢。

  • 问题内容: 我尝试了python 请求库文档中提供的示例。 使用,我得到了响应代码,但是我想获得所请求的每个页面的内容。例如,这不起作用: 问题答案: 注意 下面的答案是不适用于请求v0.13.0 +。编写此问题后,异步功能已移至。但是,你可以将其替换为下面的内容,它应该可以工作。 我已经留下了这个答案,以反映原始问题,即有关使用请求的问题。 要异步执行多个任务,你必须: 为每个对象定义一个函数(

  • C Async描述了如何创建一个异步服务器和一个相应的异步客户机来与之通信。我已经在微软ViualStudio中创建了这个。 我现在需要一个java客户端说话的C服务器-我无法找到一个Java等效的客户端(到C)与C通信。 任何指点都将不胜感激