public IDisposable ObserveTaskFailure(Task task) { if (task == null) { throw new ArgumentNullException(nameof(task)); } return _observedTasks.GetOrAdd(task, t => new Lazy<IDisposable>(() => StartObserving(t))).Value; }