public static TryGet ( System.Threading.Tasks.Task task, |
||
task | System.Threading.Tasks.Task | |
result | ||
return | bool |
public static bool TryCancelScope(this tTask task) { if (task.IsCanceled) { return(true); } else if (task.IsCompleted) { return(false); } CancellationScope scope; if (CancellationScope.TryGet(task, out scope)) { return(scope.TryCancel()); } return(false); }
public void OnCompleted(Action continuation) { CancellationUtil.UnpackContinuation(continuation, out Scope.Task); CancellationScope existingScope; if (CancellationScope.TryGet(Scope.Task, out existingScope)) { // HACK: In some cases a cancelled task will get resumed, which starts it over from the beginning. // This hits us and we will get asked to schedule a resume, but we should ignore it so that the task // stays dead as it should. #if TRACING Console.WriteLine("Rejecting attempted resurrection of task {0}", existingScope); #endif return; } CancellationScope.Set(Scope.Task, Scope); IsCompleted = true; continuation(); }