in src/DotPulsar/Internal/AsyncQueueWithCursor.cs [222:246]
public async Task WaitForEmpty(CancellationToken cancellationToken)
{
TaskCompletionSource<object> tcs;
CancellationTokenRegistration registration;
lock (_queue)
{
ThrowIfDisposed();
if (_queue.Count == 0)
return;
tcs = new TaskCompletionSource<object>();
registration = cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken));
_queueEmptyTcs.Add(tcs);
}
try
{
await tcs.Task.ConfigureAwait(false);
}
finally
{
registration.Dispose();
}
}