TryGet() public static method

public static TryGet ( System.Threading.Tasks.Task task, CancellationScope &result ) : bool
task System.Threading.Tasks.Task
result CancellationScope
return bool
示例#1
0
        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);
        }
示例#2
0
            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();
            }