private async Task DispatchSingleAsync(
            TKey key,
            TaskCompletionSource <TValue> promise,
            CancellationToken cancellationToken)
        {
            var      keys     = new TKey[] { key };
            Activity?activity = DiagnosticEvents.StartSingle(key);
            IReadOnlyList <Result <TValue> > results =
                await FetchAsync(keys, cancellationToken)
                .ConfigureAwait(false);

            if (results.Count == 1)
            {
                SetSingleResult(promise, key, results.First());
            }
            else
            {
                Exception error = Errors.CreateKeysAndValuesMustMatch(1,
                                                                      results.Count);

                DiagnosticEvents.ReceivedError(key, error);
                promise.SetException(error);
            }

            DiagnosticEvents.StopSingle(activity, key,
                                        results.Select(r => r.Value).ToArray());
        }
Example #2
0
 private static void SetSingleResult(
     TaskCompletionSource <TValue> promise,
     TKey key,
     Result <TValue> result)
 {
     if (result.IsError)
     {
         DiagnosticEvents.ReceivedError(key, result);
         promise.SetException(result);
     }
     else
     {
         promise.SetResult(result);
     }
 }