【发布时间】:2019-05-13 20:21:37
【问题描述】:
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);
}
【问题讨论】:
-
如果你想“同时”(并行)处理,你可以考虑并行化 foreach。有关
Async和Await的一些方法,请参阅:stackoverflow.com/questions/11564506/…。如果你想将它分批,.Skip和.Take确实是这样做的正确方法。 -
请发布工作代码。在此示例中为
deviceClient == null,NRE 也是如此。 -
AddDeviceAsync和SendEventAsync是 CPU-bound 还是 IO-bound 操作?第一种情况最好并行工作,第二种情况需要异步代码。 -
RegistryManager线程安全吗?我们可以同时添加来自不同线程的设备,还是需要锁定?
标签: c# loops c#-4.0 foreach batch-processing