Esempio n. 1
0
 internal Task(TaskStatus taskStatus, InternalTaskOptions internalTaskOptions)
 {
     _status                = (int)taskStatus;
     _internalOptions       = internalTaskOptions;
     ExecutingTaskScheduler = TaskScheduler.Default;
     _waitHandle            = new ManualResetEventSlim(false);
 }
 public ContinuationTaskFromTask(Task antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
     : base(action, state, InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, antecedent.Scheduler)
 {
     Contract.Requires(action is Action<Task> || action is Action<Task, object>, "Invalid delegate type in ContinuationTaskFromTask");
     _antecedent = antecedent;
     CapturedContext = ExecutionContext.Capture();
 }
 public ContinuationResultTaskFromResultTask
 (
     Task <TAntecedentResult> antecedent,
     Delegate function,
     object?state,
     TaskCreationOptions creationOptions,
     InternalTaskOptions internalOptions
 )
     : base(function, state, InternalCurrentIfAttached(creationOptions), default, creationOptions, internalOptions, TaskScheduler.Default)
 {
     Contract.Requires(function is Func <Task <TAntecedentResult>, TResult> || function is Func <Task <TAntecedentResult>, object?, TResult>, "Invalid delegate type in ContinuationResultTaskFromResultTask");
     _antecedent     = antecedent;
     CapturedContext = ExecutionContext.Capture();
 }
 public ContinuationResultTaskFromTask(Task antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
     : base(function, state, InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, antecedent.Scheduler)
 {
     Contract.Requires(function is Func <Task, TResult> || function is Func <Task, object, TResult>, "Invalid delegate type in ContinuationResultTaskFromTask");
     _antecedent     = antecedent;
     CapturedContext = ExecutionContext.Capture();
 }
 public ContinuationTaskFromResultTask(Task <TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
     : base(action, state, InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, TaskScheduler.Default)
 {
     Contract.Requires(action is Action <Task <TAntecedentResult> > || action is Action <Task <TAntecedentResult>, object>, "Invalid delegate type in ContinuationTaskFromResultTask");
     _antecedent     = antecedent;
     CapturedContext = ExecutionContext.Capture();
 }
 internal override Task CreateReplicaTask(Action <object> taskReplicaDelegate, object stateObject, Task parentTask, TaskScheduler taskScheduler, TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica)
 {
     return((Task) new ParallelForReplicaTask(taskReplicaDelegate, stateObject, parentTask, taskScheduler, creationOptionsForReplica, internalOptionsForReplica));
 }
Esempio n. 7
0
 public ContinuationResultTaskFromTask(
     Task antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
     base(function, state, Task.InternalCurrentIfAttached(creationOptions), default, creationOptions, internalOptions, null)
 {
     Debug.Assert(function is Func <Task, TResult> || function is Func <Task, object, TResult>,
                  "Invalid delegate type in ContinuationResultTaskFromTask");
     m_antecedent = antecedent;
 }
Esempio n. 8
0
 public ContinuationResultTaskFromResultTask(
     Task <TAntecedentResult> antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
     base(function, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
 {
     Debug.Assert(function is Func <Task <TAntecedentResult>, TResult> || function is Func <Task <TAntecedentResult>, object, TResult>,
                  "Invalid delegate type in ContinuationResultTaskFromResultTask");
     m_antecedent = antecedent;
     PossiblyCaptureContext();
 }
 internal Task(Func <object, TResult> valueSelector, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark) : this(valueSelector, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     base.PossiblyCaptureContext(ref stackMark);
 }
 internal Task(Func <object, TResult> valueSelector, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler) : base((valueSelector != null) ? new Action <object>(Task <TResult> .InvokeFuture) : null, null, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     if ((internalOptions & InternalTaskOptions.SelfReplicating) != InternalTaskOptions.None)
     {
         throw new ArgumentOutOfRangeException("creationOptions", Environment.GetResourceString("TaskT_ctor_SelfReplicating"));
     }
     this.m_valueSelector = valueSelector;
     base.m_stateObject   = this;
     this.m_futureState   = state;
 }
 internal ParallelForReplicaTask(Action<object> taskReplicaDelegate, object stateObject, Task parentTask, TaskScheduler taskScheduler, TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica) : base(taskReplicaDelegate, stateObject, parentTask, CancellationToken.None, creationOptionsForReplica, internalOptionsForReplica, taskScheduler)
 {
 }
        internal ParallelForReplicatingTask(ParallelOptions parallelOptions, Action action, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) : base(action, null, Task.InternalCurrent, default(CancellationToken), creationOptions, internalOptions | InternalTaskOptions.SelfReplicating, null)
        {
            this.m_replicationDownCount = parallelOptions.EffectiveMaxConcurrencyLevel;
            StackCrawlMark stackCrawlMark = StackCrawlMark.LookForMyCaller;

            base.PossiblyCaptureContext(ref stackCrawlMark);
        }
Esempio n. 13
0
 /// <summary>
 /// An internal constructor used by the factory methods on task and its descendent(s).
 /// This variant does not capture the ExecutionContext; it is up to the caller to do that.
 /// </summary>
 /// <param name="action">An action to execute.</param>
 /// <param name="state">Optional state to pass to the action.</param>
 /// <param name="parent">Parent of Task.</param>
 /// <param name="cancellationToken">A CancellationToken for the task.</param>
 /// <param name="scheduler">A task scheduler under which the task will run.</param>
 /// <param name="creationOptions">Options to control its execution.</param>
 /// <param name="internalOptions">Internal options to control its execution</param>
 internal Task(Delegate action, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
 {
     if (action == null)
     {
         throw new ArgumentNullException("action");
     }
     if (ReferenceEquals(scheduler, null))
     {
         throw new ArgumentNullException("scheduler");
     }
     Contract.EndContractBlock();
     // This is readonly, and so must be set in the constructor
     // Keep a link to your parent if: (A) You are attached, or (B) you are self-replicating.
     if
         (
         ((creationOptions & TaskCreationOptions.AttachedToParent) != 0)
         || ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
         )
     {
         _parent = parent;
     }
     _id = Interlocked.Increment(ref _lastId) - 1;
     _status = (int)TaskStatus.Created;
     if
     (
         _parent != null
         && ((creationOptions & TaskCreationOptions.AttachedToParent) != 0)
         && ((_parent.CreationOptions & TaskCreationOptions.DenyChildAttach) == 0)
     )
     {
         _parent.AddNewChild();
     }
     Action = action;
     State = state;
     Scheduler = scheduler;
     _waitHandle = new ManualResetEventSlim(false);
     if ((creationOptions &
             ~(TaskCreationOptions.AttachedToParent |
               TaskCreationOptions.LongRunning |
               TaskCreationOptions.DenyChildAttach |
               TaskCreationOptions.HideScheduler |
               TaskCreationOptions.PreferFairness |
               TaskCreationOptions.RunContinuationsAsynchronously)) != 0)
     {
         throw new ArgumentOutOfRangeException("creationOptions");
     }
     // Throw exception if the user specifies both LongRunning and SelfReplicating
     if (((creationOptions & TaskCreationOptions.LongRunning) != 0) &&
         ((internalOptions & InternalTaskOptions.SelfReplicating) != 0))
     {
         throw new InvalidOperationException("An attempt was made to create a LongRunning SelfReplicating task.");
     }
     if ((internalOptions & InternalTaskOptions.ContinuationTask) != 0)
     {
         // For continuation tasks or TaskCompletionSource.Tasks, begin life in the
         // WaitingForActivation state rather than the Created state.
         _status = (int)TaskStatus.WaitingForActivation;
     }
     _creationOptions = creationOptions;
     _internalOptions = internalOptions;
     // if we have a non-null cancellationToken, allocate the contingent properties to save it
     // we need to do this as the very last thing in the construction path, because the CT registration could modify m_stateFlags
     if (cancellationToken.CanBeCanceled)
     {
         AssignCancellationToken(cancellationToken, null, null);
     }
 }
Esempio n. 14
0
 internal Task(Delegate function, object?state, Task?parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
     : base(function, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     // Empty
 }
        internal static Task <TResult> StartNew(Task parent, Func <object, TResult> function, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler, ref StackCrawlMark stackMark)
        {
            if (function == null)
            {
                throw new ArgumentNullException("function");
            }
            if (scheduler == null)
            {
                throw new ArgumentNullException("scheduler");
            }
            if ((internalOptions & InternalTaskOptions.SelfReplicating) != InternalTaskOptions.None)
            {
                throw new ArgumentOutOfRangeException("creationOptions", Environment.GetResourceString("TaskT_ctor_SelfReplicating"));
            }
            Task <TResult> task = new Task <TResult>(function, state, parent, cancellationToken, creationOptions, internalOptions | InternalTaskOptions.QueuedByRuntime, scheduler, ref stackMark);

            task.ScheduleAndStart(false);
            return(task);
        }
Esempio n. 16
0
 internal Task(Action action, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
     : this(action, null, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     CapturedContext = ExecutionContext.Capture();
 }
 internal Task(object state, CancellationToken cancellationToken, TaskCreationOptions options, InternalTaskOptions internalOptions) : base(null, cancellationToken, options, internalOptions, true)
 {
     this.m_valueSelector = null;
     this.m_futureState   = state;
 }
Esempio n. 18
0
 public ContinuationTaskFromTask(
     Task antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
     base(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
 {
     Debug.Assert(action is Action <Task> || action is Action <Task, object>,
                  "Invalid delegate type in ContinuationTaskFromTask");
     m_antecedent = antecedent;
     PossiblyCaptureContext();
 }
 internal ParallelForReplicatingTask(ParallelOptions parallelOptions, Action action, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) : base(action, null, Task.InternalCurrent, CancellationToken.None, creationOptions, internalOptions | InternalTaskOptions.SelfReplicating, null)
 {
     this.m_replicationDownCount = parallelOptions.EffectiveMaxConcurrencyLevel;
     StackCrawlMark lookForMyCaller = StackCrawlMark.LookForMyCaller;
     base.PossiblyCaptureContext(ref lookForMyCaller);
 }
 public ContinuationTaskFromResultTask(Task <TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark)
     : base(action, state, Task.InternalCurrentIfAttached(creationOptions), new CancellationToken(), creationOptions, internalOptions, (TaskScheduler)null)
 {
     this.m_antecedent = antecedent;
     this.PossiblyCaptureContext(ref stackMark);
 }
 internal override Task CreateReplicaTask(Action<object> taskReplicaDelegate, object stateObject, Task parentTask, TaskScheduler taskScheduler, TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica)
 {
     return new ParallelForReplicaTask(taskReplicaDelegate, stateObject, parentTask, taskScheduler, creationOptionsForReplica, internalOptionsForReplica);
 }
Esempio n. 22
0
 public ContinuationTaskFromResultTask(
     Task <TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
     base(action, state, Task.InternalCurrentIfAttached(creationOptions), default, creationOptions, internalOptions, null)
 {
     Debug.Assert(action is Action <Task <TAntecedentResult> > || action is Action <Task <TAntecedentResult>, object>,
                  "Invalid delegate type in ContinuationTaskFromResultTask");
     m_antecedent = antecedent;
 }
Esempio n. 23
0
 internal Task(Action <object> action, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
     : this((Delegate)action, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     CapturedContext = ExecutionContext.Capture();
 }
        internal ParallelForReplicatingTask(ParallelOptions parallelOptions, Action action, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
            : base((Delegate)action, (object)null, Task.InternalCurrent, new CancellationToken(), creationOptions, internalOptions | InternalTaskOptions.SelfReplicating, (TaskScheduler)null)
        {
            this.m_replicationDownCount = parallelOptions.EffectiveMaxConcurrencyLevel;
            StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;

            this.PossiblyCaptureContext(ref stackMark);
        }
Esempio n. 25
0
 /// <summary>
 /// An internal constructor used by the factory methods on task and its descendent(s).
 /// This variant does not capture the ExecutionContext; it is up to the caller to do that.
 /// </summary>
 /// <param name="action">An action to execute.</param>
 /// <param name="state">Optional state to pass to the action.</param>
 /// <param name="parent">Parent of Task.</param>
 /// <param name="cancellationToken">A CancellationToken for the task.</param>
 /// <param name="scheduler">A task scheduler under which the task will run.</param>
 /// <param name="creationOptions">Options to control its execution.</param>
 /// <param name="internalOptions">Internal options to control its execution</param>
 internal Task(Delegate action, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
 {
     if (action == null)
     {
         throw new ArgumentNullException("action");
     }
     if (ReferenceEquals(scheduler, null))
     {
         throw new ArgumentNullException("scheduler");
     }
     Contract.EndContractBlock();
     // This is readonly, and so must be set in the constructor
     // Keep a link to your parent if: (A) You are attached, or (B) you are self-replicating.
     if
     (
         ((creationOptions & TaskCreationOptions.AttachedToParent) != 0) ||
         ((internalOptions & InternalTaskOptions.SelfReplicating) != 0)
     )
     {
         _parent = parent;
     }
     _id     = Interlocked.Increment(ref _lastId) - 1;
     _status = (int)TaskStatus.Created;
     if
     (
         _parent != null &&
         ((creationOptions & TaskCreationOptions.AttachedToParent) != 0) &&
         ((_parent.CreationOptions & TaskCreationOptions.DenyChildAttach) == 0)
     )
     {
         _parent.AddNewChild();
     }
     Action = action;
     State  = state;
     ExecutingTaskScheduler = scheduler;
     _waitHandle            = new ManualResetEventSlim(false);
     if ((creationOptions &
          ~(TaskCreationOptions.AttachedToParent |
            TaskCreationOptions.LongRunning |
            TaskCreationOptions.DenyChildAttach |
            TaskCreationOptions.HideScheduler |
            TaskCreationOptions.PreferFairness |
            TaskCreationOptions.RunContinuationsAsynchronously)) != 0)
     {
         throw new ArgumentOutOfRangeException("creationOptions");
     }
     // Throw exception if the user specifies both LongRunning and SelfReplicating
     if (((creationOptions & TaskCreationOptions.LongRunning) != 0) &&
         ((internalOptions & InternalTaskOptions.SelfReplicating) != 0))
     {
         throw new InvalidOperationException("An attempt was made to create a LongRunning SelfReplicating task.");
     }
     if ((internalOptions & InternalTaskOptions.ContinuationTask) != 0)
     {
         // For continuation tasks or TaskCompletionSource.Tasks, begin life in the
         // WaitingForActivation state rather than the Created state.
         _status = (int)TaskStatus.WaitingForActivation;
     }
     _creationOptions = creationOptions;
     _internalOptions = internalOptions;
     // if we have a non-null cancellationToken, allocate the contingent properties to save it
     // we need to do this as the very last thing in the construction path, because the CT registration could modify m_stateFlags
     if (cancellationToken.CanBeCanceled)
     {
         AssignCancellationToken(cancellationToken, null, null);
     }
 }
Esempio n. 26
0
 internal Task(TaskStatus taskStatus, InternalTaskOptions internalTaskOptions)
 {
     _status                = (int)taskStatus;
     _internalOptions       = internalTaskOptions;
     ExecutingTaskScheduler = TaskScheduler.Default;
 }
Esempio n. 27
0
 public ContinuationTaskFromResultTask(
     Task <TAntecedentResult> antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions) :
     base(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
 {
     Contract.Requires(action is Action <Task <TAntecedentResult> > || action is Action <Task <TAntecedentResult>, object>,
                       "Invalid delegate type in ContinuationTaskFromResultTask");
     m_antecedent = antecedent;
     PossiblyCaptureContext();
 }
 public ContinuationTaskFromTask(Task antecedent, Delegate action, object?state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions)
     : base(action, state, InternalCurrentIfAttached(creationOptions), default, creationOptions, internalOptions, antecedent.ExecutingTaskScheduler)
 {
     Contract.Requires(action is Action <Task> || action is Action <Task, object?>, "Invalid delegate type in ContinuationTaskFromTask");
     _antecedent     = antecedent;
     CapturedContext = ExecutionContext.Capture();
 }
Esempio n. 29
0
 public ContinuationResultTaskFromTask(
     Task antecedent, Delegate function, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) :
     base(function, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
 {
     Contract.Requires(function is Func <Task, TResult> || function is Func <Task, object, TResult>,
                       "Invalid delegate type in ContinuationResultTaskFromTask");
     m_antecedent = antecedent;
     PossiblyCaptureContext(ref stackMark);
 }
Esempio n. 30
0
 internal Task(Func <TResult> function, Task?parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
     : this(function, null, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     CapturedContext = ExecutionContext.Capture();
 }
Esempio n. 31
0
 // Token: 0x06004046 RID: 16454 RVA: 0x000EF860 File Offset: 0x000EDA60
 public ContinuationTaskFromTask(Task antecedent, Delegate action, object state, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, ref StackCrawlMark stackMark) : base(action, state, Task.InternalCurrentIfAttached(creationOptions), default(CancellationToken), creationOptions, internalOptions, null)
 {
     this.m_antecedent = antecedent;
     base.PossiblyCaptureContext(ref stackMark);
 }
 internal ParallelForReplicaTask(Action <object> taskReplicaDelegate, object stateObject, Task parentTask, TaskScheduler taskScheduler, TaskCreationOptions creationOptionsForReplica, InternalTaskOptions internalOptionsForReplica) : base(taskReplicaDelegate, stateObject, parentTask, CancellationToken.None, creationOptionsForReplica, internalOptionsForReplica, taskScheduler)
 {
 }
Esempio n. 33
0
 internal Task(Action<object> action, object state, Task parent, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
     : this((Delegate)action, state, parent, cancellationToken, creationOptions, internalOptions, scheduler)
 {
     CapturedContext = ExecutionContext.Capture();
 }