public void SelectTest() { bool ran = false; var context = new ContextTest { Id = 1 }; var runner = new AgentLocalRunner <ContextTest>( 1, 0x10, context); var monad = runner.To(1); monad.Select((ctx, _) => { ran = true; return(Task.FromResult(runner.To(2))); }).Wait(); Assert.IsTrue(ran); }
public void MultiThreadTest() { var threadCount = 6; var spinCount = 1_000_000; var total = 0; var runner = new AgentLocalRunner <ContextTest>( 1, 0x1000, new ContextTest()); var monad = runner.To(1); var threads = new Thread[threadCount]; for (var i = 0; i < threadCount; i++) { threads[i] = new Thread((obj) => { for (var j = 0; j < spinCount; j++) { monad.Select((val, _) => { Interlocked.Increment(ref total); return(Task.FromResult(0)); }).Wait(); } }); } foreach (var thread in threads) { thread.Start(); } foreach (var thread in threads) { thread.Join(); } Assert.AreEqual(total, spinCount * threadCount); }