private async Task WatchTaskAsync(Task task) { await task; var handler = PropertyChanged; if (handler == null) { return; } void Notify(string propertyName) => handler(this, PropertyChangedEventArgsCache.GetEventArgs(propertyName)); Notify(nameof(Status)); Notify(nameof(IsCompleted)); Notify(nameof(IsNotCompleted)); if (task.IsCanceled) { Notify(nameof(IsCanceled)); } else if (task.IsFaulted) { Notify(nameof(IsFaulted)); Notify(nameof(Exception)); Notify(nameof(InnerException)); Notify(nameof(ErrorMessage)); } else { Notify(nameof(IsSuccessfullyCompleted)); Notify(nameof(Result)); } }
protected void PropertyChanged(string propertyName) { PropertyChangedEventArgs eventArgs = PropertyChangedEventArgsCache.GetEventArgs(propertyName); _propertyChangedHandler?.Invoke(this, eventArgs); }