Exemplo n.º 1
0
        public async Task <TMessage[]> WaitAsync(TimeSpan timeout, CancellationToken cancellationToken)
        {
            foreach (var message in _listener.GetMessages <TMessage>())
            {
                HandleMessage(message);
                if (IsFinished)
                {
                    break;
                }
            }

            await Task.WhenAny(_tcs.Task, Task.Delay(timeout, cancellationToken));

            StopListening();
            cancellationToken.ThrowIfCancellationRequested();

            var messages = _listener.GetMessages <TMessage>().Where(_predicate).Take(_expectedCount).ToArray();

            if (messages.Length >= _expectedCount)
            {
                return(messages);
            }

            throw new TimeoutException($"Failed to receive matching {_expectedCount} {typeof(TMessage).Name} message(s) within {timeout.FormatPretty()}:\n\nReceived {messages.Length} messages matching criteria:\n{ObjectFormatter.DumpMany(messages)}\n\nLast recorded {typeof(TMessage).Name} messages:\n{ObjectFormatter.DumpMany(_listener.GetMessages<TMessage>().Take(10))}");
        }
Exemplo n.º 2
0
        public async Task <TMessage> WaitAsync(TimeSpan timeout, CancellationToken cancellationToken)
        {
            foreach (var message in _listener.GetMessages <TMessage>())
            {
                HandleMessage(message);
                if (_tcs.Task.IsCompleted)
                {
                    return(await _tcs.Task);
                }
            }

            if (await Task.WhenAny(_tcs.Task, Task.Delay(timeout, cancellationToken)) == _tcs.Task)
            {
                return(await _tcs.Task);
            }
            cancellationToken.ThrowIfCancellationRequested();
            throw new TimeoutException($"Failed to receive matching {typeof(TMessage).Name} within {timeout.FormatPretty()}.\n\nLast recorded {typeof(TMessage).Name} messages:\n{ObjectFormatter.DumpMany(_listener.GetMessages<TMessage>().Take(10))}");
        }