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()); }
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); } }