public static void AsyncFlowControlTest()
{
ThreadTestHelpers.RunTestInBackgroundThread(() =>
{
Action<AsyncFlowControl, AsyncFlowControl, bool> verifyEquality =
(afc0, afc1, areExpectedToBeEqual) =>
{
Assert.Equal(areExpectedToBeEqual, afc0.Equals(afc1));
Assert.Equal(areExpectedToBeEqual, afc0.Equals((object)afc1));
Assert.Equal(areExpectedToBeEqual, afc0 == afc1);
Assert.NotEqual(areExpectedToBeEqual, afc0 != afc1);
};
AsyncFlowControl asyncFlowControl0 = ExecutionContext.SuppressFlow();
ExecutionContext.RestoreFlow();
AsyncFlowControl asyncFlowControl1 = ExecutionContext.SuppressFlow();
ExecutionContext.RestoreFlow();
verifyEquality(asyncFlowControl0, asyncFlowControl1, true);
verifyEquality(asyncFlowControl1, asyncFlowControl0, true);
var asyncLocal = new AsyncLocal<int>();
asyncLocal.Value = 1;
asyncFlowControl1 = ExecutionContext.SuppressFlow();
ExecutionContext.RestoreFlow();
verifyEquality(asyncFlowControl0, asyncFlowControl1, true);
verifyEquality(asyncFlowControl1, asyncFlowControl0, true);
asyncFlowControl1 = new AsyncFlowControl();
verifyEquality(asyncFlowControl0, asyncFlowControl1, false);
verifyEquality(asyncFlowControl1, asyncFlowControl0, false);
ThreadTestHelpers.RunTestInBackgroundThread(() => asyncFlowControl1 = ExecutionContext.SuppressFlow());
verifyEquality(asyncFlowControl0, asyncFlowControl1, false);
verifyEquality(asyncFlowControl1, asyncFlowControl0, false);
});
}