我尝试使用GetDevicesAsync方法检索所有设备后,通过循环使用RemoveDeciceAsync方法删除设备。但是这个删除过程有时会对某些设备抛出异常。请注意,并不总是抛出异常。如何使用.Net SDK清除IoT中心的所有设备? 以下是删除设备的源代码:
答案 0 :(得分:0)
在没有错误的情况下很难帮助您,但不是使用带有RemoveDeviceAsync的循环,SDK提供了一个带有强制删除选项的批量删除。
RemoveDevices2Async(IEnumerable,Boolean,CancellationToken);
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.devices.registrymanager
答案 1 :(得分:0)
如@Shachar所述,您需要使用RemoveDevices2Async API。 为了保证服务可用性,IoT Hub限制了每个计算单元的操作数量。您可以看到here CRUD操作被限制超过100 / min。 RemoveDevice s 2Async API批量删除设备,一次调用只计算一次操作。
答案 2 :(得分:0)
尝试一下
var registryManager = RegistryManager.CreateFromConnectionString(iot_hub_connectionString);
var deviceTwins = new List<Twin>();
var query = registryManager.CreateQuery("SELECT * FROM devices", int.MaxValue);
while (query.HasMoreResults)
{
var page = await query.GetNextAsTwinAsync();
deviceTwins.AddRange(page);
}
var devicesToDelete = deviceTwins.Select(t => { return new Device(t.DeviceId); });
var opResult = await registryManager.RemoveDevices2Async(devicesToDelete);