private IAsyncEnumerable <Message> StreamMessages(CancellationToken stopToken) => new AsyncEnumerable <Message>(async yield => { while (!stopToken.IsCancellationRequested) { try { var message = await _messageHub.GetMessage(stopToken) .ContinueWith(task => task.IsCanceled ? null : task.Result); if (message == null) { break; } await yield.ReturnAsync(message); } catch (OperationCanceledException) { break; } } });