public async Task Run(uint attempts, TimeSpan timeBetweenAttempts) { var celcius = RandomTemperature(); var cancelSource = new CancellationTokenSource(); await SetTemperatureAsync(celcius); var getTemps = GetTemperatures(cancelSource.Token); for (var i = 1; i < attempts; i++) { await StopwatchExtension.RunAsync( $"{ID}: attempt {i+1}", async() => { await Task.Delay(timeBetweenAttempts); celcius = ChangeTemperature(celcius); return(await SetTemperatureAsync(celcius)); } ); } Console.WriteLine($"{ID}: done setting temperatures"); cancelSource.Cancel(); await getTemps; await channel.ShutdownAsync(); Console.WriteLine($"{ID}: ALL DONE"); }
private async Task <Empty> SetTemperatureAsync(float celcius) { Console.WriteLine($"{ID}: Setting temperature to {celcius}"); return(await StopwatchExtension.RunAsync <Empty>($"{ID} setTemperature {celcius}", () => client.set_temperatureAsync(new Temperature { Device = ID, Celcius = celcius }).ResponseAsync )); }