/// <summary> /// Read test thread procedure. /// </summary> /// <param name="data">AutoResetEvent instance to signal when complete.</param> internal void ReadThreadProc(object data) { AutoResetEvent evt = (AutoResetEvent)data; // Create a queue client. HttpQueueClient <T> qc = new HttpQueueClient <T>(new Uri(serviceUri), c_ListenerName); // Check that cancellation isn't requested and we are not at the requested count. while ((_requestCount < _maxRequests) && (false == _cancellationToken.IsCancellationRequested)) { try { Stopwatch swCall = Stopwatch.StartNew(); IEnumerable <QueueItem <T> > items = qc.DequeueAsync(_batchSize, cancellationToken: _cancellationToken).GetAwaiter().GetResult(); swCall.Stop(); // Track the call time. TrackCallData(swCall.ElapsedMilliseconds); // Build the list of leases to release. List <PopReceipt> keys = new List <PopReceipt>(_batchSize); foreach (QueueItem <T> item in items) { keys.Add(item.Key); } // Were any items returned? if (0 == keys.Count) { Interlocked.Increment(ref _notFoundOrConflict); } else // Release the held leases for each item. { IEnumerable <bool> results = qc.ReleaseLeaseAsync(keys, _cancellationToken).GetAwaiter().GetResult(); foreach (bool bResult in results) { if (bResult) { Interlocked.Increment(ref _successfulRequests); } } } } catch (TimeoutException) { Interlocked.Increment(ref _timedoutRequests); } catch (Exception ex) { Console.WriteLine($"ReadTest.ReadThreadProc exception {ex.GetType().Name}: {ex.Message}, {ex.StackTrace}"); } // Increment the request count. Interlocked.Increment(ref _requestCount); if (0 == _requestCount % 100) { Console.Write("\rTotal Read: {0,-15:N0}", _requestCount); } } // Signal this thread has completed. evt.Set(); }
/// <summary> /// Releases the lease for each of the items in the list. /// </summary> /// <param name="client">QueueClient instance.</param> /// <param name="items">Items to release leases.</param> private async Task ReleaseLeasesAsync(HttpQueueClient <Item> client, IEnumerable <QueueItem <Item> > items) { // Release the lease. var results = await client.ReleaseLeaseAsync(KeyArrayFromItems(items), CancellationToken.None).ConfigureAwait(false); foreach (bool b in results) { Assert.IsTrue(b); } }