public void TestSendOrPostCallbackSyncThreadPoolWorkItem() { int value = 0; System.Threading.SendOrPostCallback act = (s) => { Interlocked.Increment(ref value); }; var item = new SendOrPostCallbackSyncThreadPoolWorkItem(act, null); bool waitFinished = false; int startedFlag = 0; Task.Run(() => { Interlocked.Exchange(ref startedFlag, 1); item.Wait(); Volatile.Write(ref waitFinished, true); }); TimingAssert.IsTrue(5000, () => Volatile.Read(ref startedFlag) == 1); Thread.Sleep(100); Assert.AreEqual(0, value); Assert.AreEqual(false, waitFinished); item.Run(false, false); TimingAssert.AreEqual(5000, 1, () => Volatile.Read(ref value)); TimingAssert.AreEqual(5000, true, () => Volatile.Read(ref waitFinished)); }
public void TestSendOrPostCallbackSyncThreadPoolWorkItemExceptions() { System.Threading.SendOrPostCallback act = (s) => { throw new Exception(); }; var item = new SendOrPostCallbackSyncThreadPoolWorkItem(act, null); Task.Delay(1000).ContinueWith(t => item.Run(false, false)); item.Wait(); }