public static void WaitTest()
{
var tsc = new TestSynchronizationContext();
Assert.Throws<ArgumentNullException>(() => tsc.Wait(null, false, 0));
var e = new ManualResetEvent(false);
IntPtr eventHandle = e.SafeWaitHandle.DangerousGetHandle();
var handles = new IntPtr[] { eventHandle, eventHandle };
Assert.Equal(WaitHandle.WaitTimeout, tsc.Wait(handles, false, 0));
Assert.Throws<DuplicateWaitObjectException>(() => tsc.Wait(handles, true, 0));
var e2 = new ManualResetEvent(false);
handles = new IntPtr[] { eventHandle, e2.SafeWaitHandle.DangerousGetHandle() };
Assert.Equal(WaitHandle.WaitTimeout, tsc.Wait(handles, false, 0));
Assert.Equal(WaitHandle.WaitTimeout, tsc.Wait(handles, true, 0));
e.Set();
Assert.Equal(0, tsc.Wait(handles, false, 0));
Assert.Equal(WaitHandle.WaitTimeout, tsc.Wait(handles, true, 0));
e2.Set();
Assert.Equal(0, tsc.Wait(handles, false, 0));
Assert.Equal(0, tsc.Wait(handles, true, 0));
}