Actress.Tests.MailboxProcessorTests.PostTryReceive C# (CSharp) Method

PostTryReceive() private method

private PostTryReceive ( int timeout, int n ) : void
timeout int
n int
return void
        public void PostTryReceive(int timeout, int n)
        {
            // Given
            var received = 0L;

            var mb = MailboxProcessor.Start<IOption<int>>(async inbox =>
            {
                while (Interlocked.Read(ref received) < n)
                {
                    var msgOpt = await inbox.TryReceive(timeout);
                    if (msgOpt == null)
                    {
                        var numReceived = Interlocked.Read(ref received);
                        if (numReceived % 100 == 0)
                            Trace.WriteLine(string.Format("timeout!, received = {0}", numReceived));
                    }
                    else
                    {
                        Interlocked.Increment(ref received);
                    }
                }
            });

            // When
            for (var i = 0; i < n; i++)
            {
                Thread.Sleep(1);
                mb.Post(Option.Some(i));
            }

            // Then
            while (Interlocked.Read(ref received) < n)
            {
                var numReceived = Interlocked.Read(ref received);
                if (numReceived%100 == 0)
                    Trace.WriteLine(string.Format("received = {0}", numReceived));

                Thread.Sleep(1);
            }

            Assert.Equal(n, received);
        }