public async Task ExecuteNotifiesTaskStatus() { // http://stackoverflow.com/questions/34811639/is-there-a-way-to-be-notified-when-task-status-changes-to-running var tcs = new TaskCompletionSource <int>(); using (var command = new AsyncCommand(() => tcs.Task)) { var taskStatuses = new List <TaskStatus>(); using (command.ObservePropertyChangedWithValue(x => x.Execution.Status) .Subscribe(x => taskStatuses.Add(x.EventArgs.Value))) { Assert.IsFalse(command.IsExecuting); Assert.IsFalse(command.CancelCommand.CanExecute()); command.Execute(); Assert.IsTrue(command.IsExecuting); Assert.IsFalse(command.CancelCommand.CanExecute()); var expectedStatuses = new List <TaskStatus> { TaskStatus.Created, TaskStatus.WaitingForActivation, TaskStatus.Running, }; CollectionAssert.AreEqual(expectedStatuses, taskStatuses); tcs.SetResult(1); await command.Execution.Task.ConfigureAwait(false); Assert.IsFalse(command.IsExecuting); expectedStatuses.Add(TaskStatus.RanToCompletion); CollectionAssert.AreEqual(expectedStatuses, taskStatuses); } } }