public static void DoubleCallToGetResultCausesError() { // important to verify it throws rather than acting like a new task var tcs = new ResettableBooleanCompletionSource(_testQueue); var task = tcs.GetValueTask(); tcs.Complete(true); Assert.True(task.Result); Assert.Throws <InvalidOperationException>(() => task.Result); }
public async static void CanSetResultToFalse() { var tcs = new ResettableBooleanCompletionSource(_testQueue); _ = Task.Run(() => { tcs.Complete(false); }); var result = await tcs.GetValueTask(); Assert.False(result); }
public async static void CanBeAwaitedMultipleTimes() { var tcs = new ResettableBooleanCompletionSource(_testQueue); tcs.Complete(true); Assert.True(await tcs.GetValueTask()); tcs.Complete(true); Assert.True(await tcs.GetValueTask()); tcs.Complete(false); Assert.False(await tcs.GetValueTask()); tcs.Complete(false); Assert.False(await tcs.GetValueTask()); }
private static async Task RunsContinuationsAsynchronouslyInternally() { var tcs = new ResettableBooleanCompletionSource(_testQueue); var mre = new ManualResetEventSlim(); async Task AwaitAndBlock() { await tcs.GetValueTask(); mre.Wait(); } var task = AwaitAndBlock(); await Task.Run(() => tcs.Complete(true)).DefaultTimeout(); Assert.False(task.IsCompleted); mre.Set(); await task.DefaultTimeout(); }
public TestQueueForResettableBoolean() { Source = new ResettableBooleanCompletionSource(TestUtils.CreateStackPolicy(1)); }