gpt4 book ai didi

azure - 如何判断 Azure IoT 中心设备孪生的更新何时完成?

转载 作者:行者123 更新时间:2023-12-03 03:59:06 26 4
gpt4 key购买 nike

我正在开发一个 Web 应用程序,用于对 Azure IoT 中心中的设备孪生进行更改。因此,Web 应用程序的用户可以通过我的 Web 对设备孪生进行更改,然后如果他愿意,他可以再次查询设备属性 - 但如果他足够快,他的更改还不会对设备孪生进行。

我正在使用 Microsoft.Azure.Devices.RegistryManager.UpdateTwinAsync() 更改设备孪生。问题是这是一个异步方法,没有回调参数来让我知道更新何时完成。因此,我无法知道设备孪生上的更改何时发生 - 如果我在更新后查询得太快,可能会得到旧版本。如何检测更新何时 100% 完成?

...肯定每个使用过 UpdateTwinAsync() 的人都遇到过这个问题,对吧?

编辑:

好的,我已经对此进行了一些测试,并且我很确定当调用时

等待registryManager.UpdateTwinAsync(deviceId, patch, etag);

完成,即程序进入该行之后的下一行,设备孪生尚未更新。相反,某些更新序列已在 IoT 中心启动。因此,该行之后的下一行无法确定设备孪生是否已更新。

对我来说,这听起来是一个糟糕的设计。为什么要使 UpdateTwinAsync() 成为我可以“等待”的异步方法?

也许有一种解决方法,可以立即在我的 UpdateDevice() 方法中获取设备孪生,并检查孪生“版本”是否已增加,然后才从我的方法返回状态代码。仅供引用,我的方法称为 UpdateDevice(),浏览器在 Web 服务器后端调用它,后者又在 IoT 中心调用 UpdateTwinAsync()。

最佳答案

您是否尝试过使用await运算符?这是代码。

var twin = await registryManager.GetTwinAsync("myDeviceId");
var patch =
@"{
tags: {
location: {
region: 'US',
plant: 'Redmond43'
}
}
}";
await registryManager.UpdateTwinAsync(twin.DeviceId, patch, twin.ETag);

var query = registryManager.CreateQuery(
"SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
var twinsInRedmond43 = await query.GetNextAsTwinAsync();
Console.WriteLine("Devices in Redmond43: {0}",
string.Join(", ", twinsInRedmond43.Select(t => t.DeviceId)));

了解更多信息https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-twin-getstarted

关于azure - 如何判断 Azure IoT 中心设备孪生的更新何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63233895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com