public void Put(T e) { var data = ToData(e); var request = QueuePutCodec.EncodeRequest(GetName(), data); Invoke(request); }
Task EnqueueAsync(T item, CancellationToken cancellationToken) { var itemData = ToSafeData(item); var requestMessage = QueuePutCodec.EncodeRequest(Name, itemData); var task = Cluster.Messaging.SendToPartitionOwnerAsync(requestMessage, PartitionId, cancellationToken); #if HZ_OPTIMIZE_ASYNC return(task); #else await task.CfAwait(); #endif }
private async Task <bool> EnqueueAsync(T item, TimeSpan timeToWait, bool doThrow, CancellationToken cancellationToken) { var itemData = ToSafeData(item); var timeToWaitMilliseconds = timeToWait.TimeoutMilliseconds(0); var requestMessage = timeToWaitMilliseconds < 0 ? QueuePutCodec.EncodeRequest(Name, itemData) : QueueOfferCodec.EncodeRequest(Name, itemData, timeToWaitMilliseconds); ClientMessage responseMessage; try { responseMessage = await Cluster.Messaging.SendToKeyPartitionOwnerAsync(requestMessage, PartitionKeyData, cancellationToken).CAF(); } catch { if (doThrow) { throw; } return(false); } bool queued; if (timeToWaitMilliseconds < 0) { _ = QueuePutCodec.DecodeResponse(responseMessage); queued = true; } else { queued = QueueOfferCodec.DecodeResponse(responseMessage).Response; } if (queued) { return(true); } if (doThrow) { throw new InvalidOperationException("Queue is full."); } return(false); }