コード例 #1
0
        private async Task DoEnqueue(T item, TimeSpan?initialVisibilityDelay)
        {
            string serializedItem = _serializer.Serialize(item);
            string blobname       = $"{Guid.NewGuid()}.que";

            try
            {
                using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(serializedItem)))
                {
                    await _blobRepository.UploadAsync(blobname, stream);
                }
            }
            catch (Exception ex)
            {
                throw new LargeMessageQueueException("Unable to upload blob to blob store. No item queued.", ex, blobname);
            }

            try
            {
                if (initialVisibilityDelay.HasValue)
                {
                    await _referenceQueue.EnqueueAsync(new LargeMessageReference
                    {
                        BlobReference = blobname
                    }, initialVisibilityDelay.Value);
                }
                else
                {
                    await _referenceQueue.EnqueueAsync(new LargeMessageReference
                    {
                        BlobReference = blobname
                    });
                }
            }
            catch (Exception ex)
            {
                throw new LargeMessageQueueException("Error enqueuing item, blob may be orphaned", ex, blobname);
            }
        }
コード例 #2
0
 /// <summary>
 /// Insert an item into the current queue. Calling this method is equivalent to calling
 /// <see cref="IAsyncQueue{T}.EnqueueAsync(T, CancellationToken)"/> with a value of
 /// <see cref="CancellationToken.None"/>.
 /// </summary>
 /// <typeparam name="T">The type of the queued items.</typeparam>
 /// <param name="queue">The current <see cref="IAsyncQueue{T}"/> implementation.</param>
 /// <param name="item">An object of the queued type.</param>
 /// <returns>
 /// A value indicating whether or not the enqueue operation was successful.
 /// </returns>
 public static Task <bool> EnqueueAsync <T>(this IAsyncQueue <T> queue, T item)
 {
     return(queue.EnqueueAsync(item, CancellationToken.None));
 }