AsyncTimerProcessorResult(TaskCompletionSource <TArg> tcs,
                                  Task <TaskCompletionSource <TArg> > wrappedTCS,
                                  ConfigCompletionContinuation configContinuation = ConfigCompletionContinuation.ContinueOnDefaultContext)
        {
            TCS        = tcs;
            WrappedTCS = wrappedTCS;
            if (tcs == null)
            {
                throw new ArgumentNullException(nameof(tcs));
            }
            if (wrappedTCS == null)
            {
                throw new ArgumentNullException(nameof(wrappedTCS));
            }

            TaskAwaiter = wrappedTCS.ConfigureAwait(configContinuation.ContinueOnCapturedContext()).GetAwaiter();
        }
        public AsyncEntryBlockUC(EntryBlockUC entryBlockForTaskPredicate, Task taskPredicate, ConfigCompletionContinuation configContinuation = ConfigCompletionContinuation.ContinueOnDefaultContext)
        {
            EntryBlock  = null;
            TaskAwaiter = null;

            EntryBlockForTaskPredicate = entryBlockForTaskPredicate;
            TaskBoolPredicateAwaiter   = null;
            TaskPredicateAwaiter       = taskPredicate.ConfigureAwait(configContinuation.ContinueOnCapturedContext()).GetAwaiter();

            if (!TaskPredicateAwaiter.HasValue)
            {
                throw new ArgumentNullException(nameof(taskPredicate));
            }
        }
        public AsyncEntryBlockUC(EntryBlockUC?entryBlock, TaskCompletionSource <EntryBlockUC> tcs, ConfigCompletionContinuation configContinuation = ConfigCompletionContinuation.ContinueOnDefaultContext)
        {
            EntryBlock  = entryBlock;
            TaskAwaiter = tcs?.Task.ConfigureAwait(configContinuation.ContinueOnCapturedContext()).GetAwaiter();

            EntryBlockForTaskPredicate = null;
            TaskBoolPredicateAwaiter   = null;
            TaskPredicateAwaiter       = null;

            if (!EntryBlock.HasValue && !TaskAwaiter.HasValue)
            {
                throw new ArgumentNullException($"{nameof(entryBlock)}, {nameof(tcs)}");
            }
        }
Beispiel #4
0
 public AsyncEntryBlockUC(EntryBlockUC?EntryBlock, TaskCompletionSource <EntryBlockUC> tcs, ConfigCompletionContinuation configContinuation = ConfigCompletionContinuation.ContinueOnDefaultContext)
 {
     this.EntryBlock  = EntryBlock;
     this.TaskAwaiter = tcs?.Task.ConfigureAwait(configContinuation.ContinueOnCapturedContext()).GetAwaiter();
     if (!this.EntryBlock.HasValue && !this.TaskAwaiter.HasValue)
     {
         throw new ArgumentNullException($"{nameof(EntryBlock)}, {nameof(TaskAwaiter)}");
     }
 }
Beispiel #5
0
 /// <summary>
 /// <see cref="TaskCompletionSource{TResult}"/> created with
 /// <see cref="TaskCreationOptions.RunContinuationsAsynchronously"/> if request in
 /// <see cref="taskCreationOptions"/>
 /// </summary>
 protected ACompletionUC(TaskCreationOptions taskCreationOptions, ConfigCompletionContinuation cfgContinuationContext = ConfigCompletionContinuation.ContinueOnDefaultContext)
 {
     TaskCompletionSource  = new TaskCompletionSource <object>(taskCreationOptions & TaskCreationOptions.RunContinuationsAsynchronously);
     ConfiguredTaskAwaiter = TaskCompletionSource.Task.ConfigureAwait(cfgContinuationContext.ContinueOnCapturedContext()).GetAwaiter();
 }
 public static bool ContinueOnCapturedContext(this ConfigCompletionContinuation config) => config == ConfigCompletionContinuation.ContinueOnCapturedContext;