System.Threading.Tasks.TaskScheduler.QueueTask C# (CSharp) Method

QueueTask() protected abstract method

protected abstract QueueTask ( System.Threading.Tasks.Task task ) : void
task System.Threading.Tasks.Task
return void
		protected internal abstract void QueueTask (Task task);
		protected internal virtual bool TryDequeue (Task task)

Usage Example

示例#1
0
        internal bool InternalStart(TaskScheduler scheduler, bool inline, bool throwSchedulerExceptions)
        {
            ExecutingTaskScheduler = scheduler;
            var result = Interlocked.CompareExchange(ref _status, (int)TaskStatus.WaitingForActivation, (int)TaskStatus.Created);

            if (result != (int)TaskStatus.Created && result != (int)TaskStatus.WaitingForActivation)
            {
                return(false);
            }

            var didInline = false;

            try
            {
                if (inline)
                {
                    // Should I worry about this task being a continuation?
                    // WaitAntecedent(CancellationToken);
                    didInline = scheduler.InternalTryExecuteTaskInline(this, IsScheduled);
                }

                if (!didInline)
                {
                    scheduler.QueueTask(this);
                    Interlocked.CompareExchange(ref _status, (int)TaskStatus.WaitingToRun, (int)TaskStatus.WaitingForActivation);
                }
                else
                {
                    PrivateWait(CancellationToken, false);
                }
            }
            catch (ThreadAbortException exception)
            {
                if (didInline)
                {
                    return(true);
                }

                AddException(exception);
                FinishThreadAbortedTask(true, false);
            }
            catch (Exception exception)
            {
                var taskSchedulerException = new TaskSchedulerException(exception);
                RecordException(taskSchedulerException);
                if (throwSchedulerExceptions)
                {
                    throw taskSchedulerException;
                }
            }

            return(true);
        }
All Usage Examples Of System.Threading.Tasks.TaskScheduler::QueueTask