public async Task CancelingTheTaskShouldCancelTheOperation() { SqlTaskStatus expectedStatus = SqlTaskStatus.Canceled; DatabaseOperationStub operation = new DatabaseOperationStub(); operation.TaskResult = new TaskResult { }; SqlTask sqlTask = new SqlTask(new TaskMetadata(), operation.FunctionToRun, operation.FunctionToCancel); Assert.Equal(sqlTask.TaskStatus, SqlTaskStatus.NotStarted); Task taskToVerify = sqlTask.RunAsync().ContinueWith(task => { Assert.Equal(sqlTask.TaskStatus, expectedStatus); Assert.Equal(sqlTask.IsCancelRequested, true); Assert.True(sqlTask.Duration > 0); }); Assert.Equal(sqlTask.TaskStatus, SqlTaskStatus.InProgress); Thread.Sleep(1000); sqlTask.Cancel(); await taskToVerify; }