public void PostReceive(int n)
{
// Given
var received = 0L;
var mb = MailboxProcessor.Start<IOption<int>>(async inbox =>
{
for (var i = 0; i < n; i++)
{
var _ = await inbox.Receive();
Interlocked.Increment(ref received);
}
});
// When
for (var i = 0; i < n; i++)
{
mb.Post(Option.Some(i));
}
// Then
while (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);
}