c# - 如何将大 foreach 循环分成批处理并同时处理?
问题描述
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);
}
解决方案
这对于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");
});
推荐阅读
- html - HTML,行间距之间的表格与 br 标签产生的行间距内的表格不同
- java - binarySearch 与泛型和捕获
- r - mgcv GAM 与 beta
- jquery - 我放大的放大模态图像没有关闭按钮
- python - Tkinter 按钮和条目问题
- database - PostgreSQL 搜索替换 where 条件
- wso2 - wso2ei 7 芭蕾舞女演员签署肥皂请求
- python - 在列表中合并部分冗余对象的 Pythonic 方法
- flowtype - 如何将对象的 $Shape 散布到 Exact 对象中
- c# - 使用 NEST 的 ElasticSearch 的响应无效。但是,我使用 CLI 从 curl 获得有效响应