Beispiel #1
0
        private async Task ProcessWriteTasksAsync(Stream stream, SocketPayloadWriteTask writeTask)
        {
            if (writeTask == null)
            {
                return;
            }

            using (writeTask) {
                var timer = new Stopwatch();
                try {
                    _log.Debug(() => LogEvent.Create($"Writing {writeTask.Payload.Buffer.Length} bytes with correlation id {writeTask.Payload.CorrelationId} to {Endpoint}"));
                    _configuration.OnWriting?.Invoke(Endpoint, writeTask.Payload);
                    timer.Start();
                    await stream.WriteAsync(writeTask.Payload.Buffer, 0, writeTask.Payload.Buffer.Length, _disposeToken.Token).ConfigureAwait(false);

                    timer.Stop();
                    _configuration.OnWritten?.Invoke(Endpoint, writeTask.Payload, timer.Elapsed);
                    _log.Debug(() => LogEvent.Create($"Wrote {writeTask.Payload.Buffer.Length} bytes with correlation id {writeTask.Payload.CorrelationId} to {Endpoint}"));
                    writeTask.Tcs.TrySetResult(writeTask.Payload);
                } catch (Exception ex) {
                    var wrappedException = WrappedException(ex);
                    _configuration.OnWriteFailed?.Invoke(Endpoint, writeTask.Payload, timer.Elapsed, wrappedException);
                    writeTask.Tcs.TrySetException(wrappedException);
                    throw;
                }
            }
        }
Beispiel #2
0
        /// <inheritdoc />
        public async Task <DataPayload> WriteAsync(DataPayload payload, CancellationToken cancellationToken)
        {
            var writeTask = new SocketPayloadWriteTask(payload, cancellationToken);
            await _writeTaskQueue.EnqueueAsync(writeTask, cancellationToken).ConfigureAwait(false);

            _configuration.OnWriteEnqueued?.Invoke(Endpoint, payload);
            return(await writeTask.Tcs.Task.ConfigureAwait(false));
        }