为了账号安全,请及时绑定邮箱和手机立即绑定

如何将大 foreach 循环分成批处理并同时处理?

如何将大 foreach 循环分成批处理并同时处理?

C#
莫回无 2022-06-12 10:49:28
foreach (var deviceId in deviceList){    // register device into IoT hub     Device device;    RegistryManager registryManager = RegistryManager.CreateFromConnectionString("connectionString");    device = await registryManager.AddDeviceAsync(new Device(deviceId));    // send message to iot hub    DeviceClient deviceClient;    await deviceClient.SendEventAsync("data");                       }如果设备是 10000,那么我如何将它分成多个批次并进行处理?我试过这段代码,但它没有希望public IEnumerable<user> GetBatch(int pageNumber){    return users.Skip(pageNumber * 1000).Take(1000);}
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

这对于Parallel.ForEach循环来说是一个很好的案例,它将自动将循环处理分布在多个线程中。很容易将您的代码重新安排到这样的循环中,并利用内置的并行库来启用并行处理。这当然假设顺序并不重要(而且它似乎并不基于我们所能看到的一点点)。


编辑:如果您确实需要 100 或 200 的特定批次,如评论中所述,您可以使用System.Collections.Concurrent.Partitioner类根据需要打破并行循环,这篇 SO 帖子实际上很好地描述了如何用它。


Parallel.ForEach(devices, (device) =>

            {

                        // register device into IoT hub 

                        Device device;

            RegistryManager registryManager = RegistryManager.CreateFromConnectionString("connectionString");

                        device = await registryManager.AddDeviceAsync(new Device(deviceId));



                        // send message to iot hub

                         DeviceClient deviceClient;

                        await deviceClient.SendEventAsync("data");                       


            });


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信