Microsoft.Ccr.Core.DispatcherTest.ExceptionPortAndEventButWithDQEvent C# (CSharp) Method

ExceptionPortAndEventButWithDQEvent() private method

private ExceptionPortAndEventButWithDQEvent ( ) : void
return void
        public void ExceptionPortAndEventButWithDQEvent()
        {
            using (Dispatcher d = new Dispatcher ()) {
                var dq = new DispatcherQueue ("foo", d);
                var evt = new AutoResetEvent (false);
                var port = new Port<Exception> ();

                int dispEx = 0;
                int portPost = 0;
                int queueEx = 0;

                d.UnhandledExceptionPort = port;
                d.UnhandledException += delegate { ++dispEx; };
                dq.UnhandledException += delegate { ++queueEx; evt.Set (); };

                var rec = Arbiter.Receive (true, port, (e) => { ++portPost; });
                rec.TaskQueue = dq;
                rec.Execute ();

                dq.Enqueue (Arbiter.FromHandler (() => { throw new Exception (); }));
                Assert.IsTrue (evt.WaitOne (2000), "#1");
                Assert.AreEqual (0, portPost, "#2");
                Assert.AreEqual (0, dispEx, "#3");
                Assert.AreEqual (1, queueEx, "#4");

                dq.Enqueue (Arbiter.FromHandler (() => { throw new Exception (); }));
                Assert.IsTrue (evt.WaitOne (2000), "#5");

                Assert.AreEqual (0, portPost, "#6");
                Assert.AreEqual (0, dispEx, "#7");
                Assert.AreEqual (2, queueEx, "#8");
            }
        }