public Task Run(CancellationToken token) { var tcs = new TaskCompletionSource <bool>(); _logger.LogInformation($"{nameof(Run)}: Target={_targetRecord}"); _ = Task.Run(async() => { try { while (!token.IsCancellationRequested) { _logger.LogInformation($"{nameof(Run)}: Pinging target={_targetRecord}"); await _probe.Ping(token); await Task.Delay(TimeSpan.FromSeconds((double)_targetRecord.FrequencyInSeconds !), token); } tcs.SetResult(true); } catch (Exception ex) { _logger.LogError(ex, $"Monitoring (ping) failed, Target={_targetRecord}"); tcs.SetException(ex); return; } }); return(tcs.Task); }