Example #1
0
        public static void RunSynchronouslyTest()
        {
            Task.Factory.StartNew(delegate { CoreRunSynchronouslyTest(); }).Wait();

            // Executing RunSynchronously() on a task whose cancellationToken was previously signaled
            CancellationTokenSource cts = new CancellationTokenSource();
            CancellationToken ct = cts.Token;

            Task t1 = new Task(delegate { }, ct);   // Notice we aren't throwing an OCE.
            cts.Cancel();
            try
            {
                t1.RunSynchronously();
                Assert.True(false, string.Format("RunSynchronouslyTest:    > error: Should have thrown an exception"));
            }
            catch (InvalidOperationException)
            {
                // Assert.True(false, string.Format("RunSynchronouslyTest:    > properly threw exception: {0}", e.Message));
            }
            catch (Exception e)
            {
                Assert.True(false, string.Format("RunSynchronouslyTest:    > error: threw wrong exception: {0}", e.Message));
            }


            // Executing RunSynchronously() on a continuation task
            t1 = new Task(delegate { });
            Task t2 = t1.ContinueWith((completedTask) => { });
            try
            {
                t2.RunSynchronously();
                Assert.True(false, string.Format("RunSynchronouslyTest - continuation task:    > error: Should have thrown an exception"));
            }
            catch (InvalidOperationException)
            {
                // Assert.True(false, string.Format("    > properly threw exception: {0}", e.Message));
            }
            catch (Exception e)
            {
                Assert.True(false, string.Format("RunSynchronouslyTest - continuation task:    > error: threw wrong exception: {0}", e.Message));
            }
            t1.Start();
            t1.Wait();

            // Executing RunSynchronously() on promise-style Task
            Task<int> f1 = new TaskCompletionSource<int>().Task;
            try
            {
                f1.RunSynchronously();
                Assert.True(false, string.Format("RunSynchronouslyTest - promise-style Task:    > error: Should have thrown an exception"));
            }
            catch (InvalidOperationException)
            {
                //Assert.True(false, string.Format("    > properly threw exception: {0}", e.Message));
            }
            catch (Exception e)
            {
                Assert.True(false, string.Format("RunSynchronouslyTest - promise-style Task:    > error: threw wrong exception: {0}", e.Message));
            }
        }