示例#1
0
        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);
        }
示例#2
0
        public async static void CanSetResultToFalse()
        {
            var tcs = new ResettableBooleanCompletionSource(_testQueue);

            _ = Task.Run(() =>
            {
                tcs.Complete(false);
            });

            var result = await tcs.GetValueTask();

            Assert.False(result);
        }
示例#3
0
        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());
        }
示例#4
0
        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();
        }
示例#5
0
 public TestQueueForResettableBoolean()
 {
     Source = new ResettableBooleanCompletionSource(TestUtils.CreateStackPolicy(1));
 }