private async Task PollQueueTask(string queue, TaskCompletionSource <bool> whenReady, CancellationToken ct) { while (!ct.IsCancellationRequested) { whenReady.CompleteIfNeed(true); await _queryWindow.NextEventTask; while (!ct.IsCancellationRequested) { var result = await LongPollForItem(queue); if (result != null) { await _queryWindow.TrySaveResult(queue, result); break; } else { if (!_queryWindow.IsOpened) { break; } } } } _queryWindow.SetCanceled(queue); }