internal override void Run(Task completedTask, bool bCanInlineContinuationTask) { TaskContinuationOptions continuationOptions = this.m_options; int num = completedTask.IsRanToCompletion ? ((continuationOptions & TaskContinuationOptions.NotOnRanToCompletion) == TaskContinuationOptions.None ? 1 : 0) : (completedTask.IsCanceled ? ((continuationOptions & TaskContinuationOptions.NotOnCanceled) == TaskContinuationOptions.None ? 1 : 0) : ((continuationOptions & TaskContinuationOptions.NotOnFaulted) == TaskContinuationOptions.None ? 1 : 0)); Task task = this.m_task; if (num != 0) { if (!task.IsCanceled && AsyncCausalityTracer.LoggingOn) { AsyncCausalityTracer.TraceOperationRelation(CausalityTraceLevel.Important, task.Id, CausalityRelation.AssignDelegate); } task.m_taskScheduler = this.m_taskScheduler; if (bCanInlineContinuationTask && (continuationOptions & TaskContinuationOptions.ExecuteSynchronously) != TaskContinuationOptions.None) { TaskContinuation.InlineIfPossibleOrElseQueue(task, true); } else { try { task.ScheduleAndStart(true); } catch (TaskSchedulerException ex) { } } } else { task.InternalCancel(false); } }
private void Execute <TTask>(IEnumerable <KeyValuePair <Type, Action <object> > > tasks) where TTask : Task { bool shouldSkip = false; foreach (KeyValuePair <Type, Action <object> > taskConfiguration in tasks) { if (shouldSkip) { shouldSkip = false; continue; } TTask task = (TTask)Adapter.GetService(taskConfiguration.Key); Debug.Assert(task != null, "Task should be not null"); if (taskConfiguration.Value != null) { taskConfiguration.Value(task); } TaskContinuation continuation = task.Execute(); if (continuation == TaskContinuation.Break) { break; } shouldSkip = continuation == TaskContinuation.Skip; } }
public void Execute_should_continue_task_chain(string ipAddress, TaskContinuation expectedValue) { httpContext.SetupGet(c => c.Request.UserHostAddress).Returns(ipAddress); CacheBlockedIpAddress("192.168.0.1"); bannedIpAddressRepository.Setup(r => r.IsMatching("192.168.0.2")).Returns(true); TaskContinuation actualValue = blockRestrictedIpAddress.Execute(); Assert.Equal(expectedValue, actualValue); }