コード例 #1
0
        public void ReceiveMessageAsync__In_Parallel__Is_Synchronized()
        {
            var messages = new[] { "a", "b", "c" }.Select(x =>
            {
                var message = new Message();
                message.SetString(x);
                return(message);
            }).ToArray();

            // send the messages synchronously one after the other - this is not important for the test
            foreach (var message in messages)
            {
                _client.SendMessage(message);
            }

            // receive the messages at the same time to verify they are received in order because only one can be handled at a time
            var receivedTasks    = Enumerable.Range(0, messages.Length).Select(_ => _serverAsyncContext.ReceiveMessageAsync(CancellationToken.None)).ToArray();
            var receivedMessages = receivedTasks.Select(x => x.GetAwaiter().GetResult()).ToArray();

            receivedMessages.Should().HaveCount(3);
            var values = receivedMessages.Select(m => m.GetString()).ToArray();

            values[0].Should().Be("a");
            values[1].Should().Be("b");
            values[2].Should().Be("c");
        }
コード例 #2
0
        public void SendTimeout__Throws()
        {
            var timeSpan = TimeSpan.FromMilliseconds(100);

            _socket.Options.SendTimeout = timeSpan;
            _socket.Options.SendTimeout.Should().Be(timeSpan);
            // try to send a message without being connected
            using var message = new Message();
            message.SetString("x");
            Action send = () => _socket.SendMessage(message);

            send.Should().Throw <TimeoutException>();
        }