Ejemplo n.º 1
0
 public static Task <TResult> SelectOptionalAsync <TItem, TSelect, TCarry1, TCarry2, TResult>(this IEnumerableAsync <TItem> enumerable,
                                                                                              TCarry1 carry1, TCarry2 carry2,
                                                                                              Func <TItem, TCarry1, TCarry2,
                                                                                                    Func <TSelect, TCarry1, TCarry2, ISelectionResult <TSelect> >,
                                                                                                    Func <TCarry1, TCarry2, ISelectionResult <TSelect> >,
                                                                                                    Task <ISelectionResult <TSelect> > > selectionAsync,
                                                                                              Func <TSelect[], TCarry1, TCarry2, TResult> aggregation)
 {
     return(enumerable.SelectOptionalAsync(carry1.PairWithValue(carry2),
                                           (item, carryUpdated, next, skip) => selectionAsync(item, carryUpdated.Key, carryUpdated.Value,
                                                                                              (selected, carry1Updated, carry2Updated) => next(selected, carry1Updated.PairWithValue(carry2Updated)),
                                                                                              (carry1Updated, carry2Updated) => skip(carry1Updated.PairWithValue(carry2Updated))),
                                           (TSelect[] selectedItems, KeyValuePair <TCarry1, TCarry2> carryFinal) =>
                                           aggregation(selectedItems, carryFinal.Key, carryFinal.Value)));
 }