internal EnumeratorBlockingAsync(YieldCallbackAsync <TDelegate> yieldAsync)
        {
            var cancelYieldAsyncToken = cancelYieldAsyncTokenSource.Token;

            yieldAsyncTask = Task.Run(async() =>
            {
                try
                {
                    // TODO: Get cancellation token on this thread as well.
                    await yieldAsync.SandwichInvoke(
                        () =>
                    {
                        callbackBarrier.SignalAndWait();
                        return(this.totalCallback);
                    },
                        (updatedCallbackTask) =>
                    {
                        callbackTask = updatedCallbackTask;
                        callbackBarrier.SignalAndWait();
                        return(Task.FromResult(true));
                    });
                } catch (Exception ex)
                {
                    exception = ex;
                    throw ex;
                } finally
                {
                    complete = true;
                    callbackBarrier.RemoveParticipant();
                }
            }, cancelYieldAsyncToken);
        }
示例#2
0
 public EnumeratorNonAsync(YieldCallbackAsync <TDelegateItems> yieldAsync,
                           TDelegateConvert resultCallback)
 {
     yieldAsyncTask = Task.Run(async() =>
     {
         try
         {
             await yieldAsync.ResultSwapInvoke <TResult, TDelegateItems, TDelegateConvert>(
                 () =>
             {
                 callbackBarrier.SignalAndWait();
                 return(resultCallback);
             },
                 (updatedCallbackTask) =>
             {
                 this.Current = updatedCallbackTask;
                 callbackBarrier.SignalAndWait();
                 return(Task.FromResult(true));
             });
         }
         catch (Exception ex)
         {
             exception = ex;
             throw ex;
         }
         finally
         {
             complete = true;
             callbackBarrier.RemoveParticipant();
         }
     });
 }
 public static async Task SandwichInvoke <TDelegate>(this YieldCallbackAsync <TDelegate> yieldAsync,
                                                     SandwichPreDelegate <TDelegate> preCallback, SandwichPostDelegate postCallback)
 {
     var sandwichDelegate = GetSandwichDelegate <TDelegate>();
     await sandwichDelegate.Invoke(
         preCallback,
         yieldAsync,
         postCallback);
 }
 public static async Task ResultSwapInvoke <TResult, TDelegateItems, TDelegateConvert>(
     this YieldCallbackAsync <TDelegateItems> yieldAsync,
     ResultSwapPreDelegate <TDelegateConvert> preCallback,
     ResultSwapPostDelegate <TResult> postCallback)
 {
     var resultSwapDelegate = GetResultSwapDelegate <TResult, TDelegateItems, TDelegateConvert>();
     await resultSwapDelegate.Invoke(
         preCallback,
         yieldAsync,
         postCallback);
 }
        public static IEnumerableAsync <T> TakeAsync <T>(this IEnumerableAsync <T> items, int limit)
        {
            YieldCallbackAsync <T> yieldAsync = async yield =>
            {
                using (var enumerator = items.GetEnumerator())
                {
                    while (limit > 0 && await enumerator.MoveNextAsync(yield))
                    {
                        limit--;
                    }
                }
            };

            return(new EnumerableAsync <T>(yieldAsync));
        }
示例#6
0
 public EnumeratorAsyncTest(YieldCallbackAsync <TestDelegateAsync> yieldAsync)
 {
     yieldAsyncTask = Task.Run(async() =>
     {
         var xm = Generators.GetSandwichDelegate();
         await xm.Invoke(
             () =>
         {
             callbackBarrier.SignalAndWait();
             return(this.totalCallback);
         },
             yieldAsync,
             (updatedCallbackTask) =>
         {
             callbackTask = updatedCallbackTask;
             callbackBarrier.SignalAndWait();
             return(Task.FromResult(true));
         });
         callbackBarrier.RemoveParticipant();
     });
 }
 public IteratorAsyncTest(YieldCallbackAsync <TestDelegateAsync> yieldAsync,
                          TestDelegateResult <int> resultCallback)
 {
     yieldAsyncTask = Task.Run(async() =>
     {
         var xm = EmptyClass2.GetResultSwapDelegate();
         await xm.Invoke(
             () =>
         {
             callbackBarrier.SignalAndWait();
             return(resultCallback);
         },
             yieldAsync,
             (updatedCallbackTask) =>
         {
             this.Current = updatedCallbackTask;
             callbackBarrier.SignalAndWait();
             return(Task.FromResult(true));
         });
         complete = true;
         callbackBarrier.RemoveParticipant();
     });
 }
示例#8
0
 internal IteratorSimpleAsync(YieldCallbackAsync <TDelegate> yieldAsync)
 {
     this.yieldAsync = yieldAsync;
 }
示例#9
0
 public static IEnumerableAsync <TDelegate> YieldAsync <TDelegate>(YieldCallbackAsync <TDelegate> yieldAsync)
 {
     return(new EnumerableAsync <TDelegate>(yieldAsync));
 }
 internal IteratorAsyncTest(YieldCallbackAsync <TDelegate> yieldAsync)
 {
     this.yieldAsync = yieldAsync;
 }
 public EnumerableTest(YieldCallbackAsync <TestDelegateAsync> yieldAsync, TestDelegateResult <int> convertDelegate)
 {
     this.yieldAsync      = yieldAsync;
     this.convertDelegate = convertDelegate;
 }
 public EnumerableNonAsync(YieldCallbackAsync <TDelegateItems> yieldAsync, TDelegateConvert convertDelegate)
 {
     this.yieldAsync      = yieldAsync;
     this.convertDelegate = convertDelegate;
 }
示例#13
0
 public EnumerableAsyncTest(YieldCallbackAsync <TestDelegateAsync> yieldAsync)
 {
     this.yieldAsync = yieldAsync;
 }
示例#14
0
 public static IEnumerableAsync <TestDelegateAsync> YieldAsync(YieldCallbackAsync <TestDelegateAsync> yieldAsync)
 {
     return(new EnumerableAsyncTest(yieldAsync));
 }