Beispiel #1
0
        internal Task(Action <object> action,
                      object state,
                      CancellationToken cancellationToken,
                      TaskCreationOptions creationOptions,
                      Task parent)
        {
            this.taskCreationOptions = creationOptions;
            this.action = action;
            this.state  = state;
            this.taskId = Interlocked.Increment(ref id);
            this.status = cancellationToken.IsCancellationRequested ? TaskStatus.Canceled : TaskStatus.Created;
            this.token  = cancellationToken;
            this.parent = parent;

            // Process taskCreationOptions
            if (CheckTaskOptions(taskCreationOptions, TaskCreationOptions.AttachedToParent) && parent != null)
            {
                parent.AddChild();
            }

            if (token.CanBeCanceled)
            {
                cancelation_registration = token.Register(l => ((Task)l).CancelReal(), this);
            }
        }
Beispiel #2
0
        public Task(Action <object> action, object state, CancellationToken token, TaskCreationOptions options)
        {
            this.taskCreationOptions = options;
            this.action = action == null ? EmptyFunc : action;
            this.state  = state;
            this.taskId = Interlocked.Increment(ref id);
            this.status = TaskStatus.Created;
            this.token  = token;

            // Process taskCreationOptions
            if (CheckTaskOptions(taskCreationOptions, TaskCreationOptions.AttachedToParent))
            {
                parent = current;
                if (parent != null)
                {
                    parent.AddChild();
                }
            }
        }
Beispiel #3
0
        internal Task(Action <object> action,
                      object state,
                      CancellationToken cancellationToken,
                      TaskCreationOptions creationOptions,
                      Task parent)
        {
            this.taskCreationOptions = creationOptions;
            this.action = action;
            this.state  = state;
            this.taskId = Interlocked.Increment(ref id);
            this.status = TaskStatus.Created;
            this.token  = cancellationToken;
            this.parent = parent;

            // Process taskCreationOptions
            if (CheckTaskOptions(taskCreationOptions, TaskCreationOptions.AttachedToParent) && parent != null)
            {
                parent.AddChild();
            }
        }
Beispiel #4
0
        public Task(Action <object> action, object state, TaskCreationOptions options)
        {
            this.taskCreationOptions = options;
            this.action = action == null ? EmptyFunc : action;
            this.state  = state;
            this.taskId = Interlocked.Increment(ref id);
            this.status = TaskStatus.Created;

            // Process taskCreationOptions
            if (CheckTaskOptions(taskCreationOptions, TaskCreationOptions.DetachedFromParent))
            {
                parent = null;
            }
            else if (parent != null)
            {
                parent.AddChild();
            }

            respectParentCancellation =
                CheckTaskOptions(taskCreationOptions, TaskCreationOptions.RespectParentCancellation);
        }
Beispiel #5
0
        internal Task(TaskActionInvoker invoker, object state, CancellationToken cancellationToken,
                      TaskCreationOptions creationOptions, Task parent = null, Task contAncestor = null)
        {
            this.invoker             = invoker;
            this.taskCreationOptions = creationOptions;
            this.state        = state;
            this.taskId       = Interlocked.Increment(ref id);
            this.status       = cancellationToken.IsCancellationRequested ? TaskStatus.Canceled : TaskStatus.Created;
            this.token        = cancellationToken;
            this.parent       = parent = parent == null ? current : parent;
            this.contAncestor = contAncestor;

            // Process taskCreationOptions
            if (CheckTaskOptions(taskCreationOptions, TaskCreationOptions.AttachedToParent) && parent != null)
            {
                parent.AddChild();
            }

            if (token.CanBeCanceled)
            {
                cancellationRegistration = token.Register(l => ((Task)l).CancelReal(), this);
            }
        }
Beispiel #6
0
		internal Task (TaskActionInvoker invoker, object state, CancellationToken cancellationToken,
		               TaskCreationOptions creationOptions, Task parent = null, Task contAncestor = null, bool ignoreCancellation = false)
		{
			this.invoker         = invoker;
			this.creationOptions = creationOptions;
			this.state           = state;
			this.taskId          = Interlocked.Increment (ref id);
			this.token           = cancellationToken;
			this.parent          = parent = parent == null ? current : parent;
			this.contAncestor    = contAncestor;
			this.status          = cancellationToken.IsCancellationRequested && !ignoreCancellation ? TaskStatus.Canceled : TaskStatus.Created;

			// Process creationOptions
#if NET_4_5
			if (parent != null && HasFlag (creationOptions, TaskCreationOptions.AttachedToParent)
			    && !HasFlag (parent.CreationOptions, TaskCreationOptions.DenyChildAttach))
#else
			if (parent != null && HasFlag (creationOptions, TaskCreationOptions.AttachedToParent))
#endif
				parent.AddChild ();

			if (token.CanBeCanceled && !ignoreCancellation)
				cancellationRegistration = token.Register (l => ((Task) l).CancelReal (), this);
		}