public void UnobservedTaskExceptionOnFinalizerThreadTest() { var foo = new FinalizerCatcher(); foo = null; GC.Collect(); GC.WaitForPendingFinalizers(); // Same than following test, if GC didn't run don't execute the rest of this test if (finalizerThreadId == -1) { return; } int evtThreadId = -2; TaskScheduler.UnobservedTaskException += delegate { evtThreadId = Thread.CurrentThread.ManagedThreadId; }; var evt = new ManualResetEventSlim(); CreateAndForgetFaultedTask(evt); evt.Wait(500); Thread.Sleep(100); GC.Collect(); GC.WaitForPendingFinalizers(); Assert.AreEqual(finalizerThreadId, evtThreadId, "Should be ran on finalizer thread"); }
public void UnobservedTaskExceptionOnFinalizerThreadTest () { var foo = new FinalizerCatcher (); foo = null; GC.Collect (); GC.WaitForPendingFinalizers (); // Same than following test, if GC didn't run don't execute the rest of this test if (finalizerThreadId == -1) return; int evtThreadId = -2; TaskScheduler.UnobservedTaskException += delegate { evtThreadId = Thread.CurrentThread.ManagedThreadId; }; var evt = new ManualResetEventSlim (); CreateAndForgetFaultedTask (evt); evt.Wait (500); Thread.Sleep (100); GC.Collect (); GC.WaitForPendingFinalizers (); Assert.AreEqual (finalizerThreadId, evtThreadId, "Should be ran on finalizer thread"); }