async Task <MessageData <TValue> > Put(PipeContext context, Task <TValue> valueTask) { var repository = _repository; if (repository != null || context.TryGetPayload(out repository)) { TimeSpan?timeToLive = default; if (context.TryGetPayload(out SendContext sendContext) && sendContext.TimeToLive.HasValue) { timeToLive = sendContext.TimeToLive; } if (timeToLive.HasValue && MessageDataDefaults.ExtraTimeToLive.HasValue) { timeToLive += MessageDataDefaults.ExtraTimeToLive; } if (!timeToLive.HasValue && MessageDataDefaults.TimeToLive.HasValue) { timeToLive = MessageDataDefaults.TimeToLive.Value; } var value = await valueTask.ConfigureAwait(false); if (value is string stringValue) { MessageData <string> messageData = timeToLive.HasValue ? await _repository.PutString(stringValue, timeToLive.Value, context.CancellationToken).ConfigureAwait(false) : await _repository.PutString(stringValue, context.CancellationToken).ConfigureAwait(false); return((MessageData <TValue>)messageData); } if (value is byte[] bytesValue) { MessageData <byte[]> messageData = timeToLive.HasValue ? await _repository.PutBytes(bytesValue, timeToLive.Value, context.CancellationToken).ConfigureAwait(false) : await _repository.PutBytes(bytesValue, context.CancellationToken).ConfigureAwait(false); return((MessageData <TValue>)messageData); } if (value is Stream streamValue) { MessageData <Stream> messageData = timeToLive.HasValue ? await _repository.PutStream(streamValue, timeToLive.Value, context.CancellationToken).ConfigureAwait(false) : await _repository.PutStream(streamValue, default, context.CancellationToken).ConfigureAwait(false);