private static async Task DesiredPropertyUpdateCallback(TwinCollection desiredProperties, object userContext) { try { var deviceClient = (DeviceClient)userContext; ConsoleWriteLine(); ConsoleWriteLine($"Received twin update, including {desiredProperties.Count} desired properties:", ConsoleColor.Green); ConsoleWriteLine(desiredProperties.ToJson(Formatting.Indented), ConsoleColor.Green); var reportedProperties = new TwinCollection(); var propertyNames = new List <string>(); // enumerate through the desired properties var enumerator = desiredProperties.GetEnumerator(); while (enumerator.MoveNext()) { var pair = (KeyValuePair <string, object>)enumerator.Current; var propertyName = pair.Key; // copy desired property to reported properties reportedProperties[propertyName] = pair.Value; propertyNames.Add(propertyName); } reportedProperties["lastUpdateInfo"] = $"Last desired property update @ {DateTime.UtcNow} involved these properties: {string.Join(", ", propertyNames)}"; ConsoleWriteLine(); ConsoleWriteLine($"Will change reported properties accordingly...", ConsoleColor.Green); await deviceClient.UpdateReportedPropertiesAsync(reportedProperties); ConsoleWriteLine($"Successfully changed reported properties", ConsoleColor.Green); await GetCurrentTwin(deviceClient); } catch (Exception ex) { ConsoleWriteLine($"* ERROR * {ex.Message}", ConsoleColor.Red); } }