public Task<EventReadResult> ReadEventAsync(string stream, long eventNumber, bool resolveLinkTos, UserCredentials userCredentials = null)
 {
     Ensure.NotNullOrEmpty(stream, "stream");
     if (eventNumber < -1) throw new ArgumentOutOfRangeException(nameof(eventNumber));
     var source = new TaskCompletionSource<EventReadResult>();
     var operation = new ReadEventOperation(Settings.Log, source, stream, eventNumber, resolveLinkTos,
                                            Settings.RequireMaster, userCredentials);
     EnqueueOperation(operation);
     return source.Task;
 }
        public async Task <EventReadResult> ReadEventAsync(string stream, long eventNumber, bool resolveLinkTos, UserCredentials userCredentials = null)
        {
            Ensure.NotNullOrEmpty(stream, "stream");
            if (eventNumber < -1)
            {
                throw new ArgumentOutOfRangeException(nameof(eventNumber));
            }
            var source    = new TaskCompletionSource <EventReadResult>(TaskCreationOptions.RunContinuationsAsynchronously);
            var operation = new ReadEventOperation(Settings.Log, source, stream, eventNumber, resolveLinkTos,
                                                   Settings.RequireMaster, userCredentials);

            await EnqueueOperation(operation).ConfigureAwait(false);

            return(await source.Task.ConfigureAwait(false));
        }
 public Task<EventReadResult> ReadEventAsync(string stream, int eventNumber, bool resolveLinkTos, UserCredentials userCredentials = null)
 {
     Ensure.NotNullOrEmpty(stream, "stream");
     if (eventNumber < -1) throw new ArgumentOutOfRangeException("eventNumber");
     var source = new TaskCompletionSource<EventReadResult>();
     var operation = new ReadEventOperation(_settings.Log, source, stream, eventNumber, resolveLinkTos,
                                            _settings.RequireMaster, userCredentials);
     EnqueueOperation(operation);
     return source.Task;
 }