static async Task RunAsync() { while (!cancellationTokenSource.Token.IsCancellationRequested) { try { await Task.Delay(TimeSpan.FromMinutes(5), cancellationTokenSource.Token); } catch (TaskCanceledException) { } int downDevices, totalDevices; StateCollection <DeviceClientState> .GetRatio(DeviceClientState.Down, out downDevices, out totalDevices); Trace.TraceInformation($"{downDevices} of {totalDevices} devices down"); if (downDevices > totalDevices * 0.5 && Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME") != null) { Trace.TraceError("Too many devices down. Force restart"); break; } } }