コード例 #1
0
        public async Task <ActionResult> Flow_Of_Execution_Example()
        {
            ViewBag.ExampleType = "Asynchronous examples - flow of execution example.";
            var asyncExamples = new AsyncExamples();

            return(View("AsyncExamples", await asyncExamples.FlowOfExecutionExample()));
        }
コード例 #2
0
        public async Task AsyncSleepTimerTest()
        {
            var asyncMethod = new AsyncExamples();

            await asyncMethod.SomeLongRunningSleep();

            Assert.AreEqual("Hello World", asyncMethod.TestProperty);
        }
コード例 #3
0
        public async Task <ActionResult> Marked_Async_With_Empty_Task_And_Calling_Await()
        {
            ViewBag.ExampleType = "Asynchronous examples - an async method that returns a simple task and DOES use the await keyword.";
            var asyncExamples = new AsyncExamples();
            await asyncExamples.Marked_Async_With_Empty_Task_And_Calling_Await();

            return(View("AsyncExamples", 99));
        }
コード例 #4
0
        public async Task <ActionResult> TemplateEndpoint()
        {
            ViewBag.ExampleType = "Asynchronous examples - template.";
            var asyncExamples = new AsyncExamples();
            var task          = asyncExamples.TrivialExample();

            return(View("AsyncExamples", await task));
        }
コード例 #5
0
        public async Task <ActionResult> Dont_await_long_running_code()
        {
            ViewBag.ExampleType = "Asynchronous examples - nested 11-second call which we don't wait for.";
            var asyncExamples = new AsyncExamples();
            var task          = asyncExamples.Dont_await_long_running_code();

            return(View("AsyncExamples", await task));
        }
コード例 #6
0
        public async Task <ActionResult> Parallel_Asynchronous()
        {
            ViewBag.ExampleType = "Asynchronous examples - parallel asynchronous code.";
            var asyncExamples = new AsyncExamples();
            await asyncExamples.Parallel_Asynchronous();

            return(View("AsyncExamples", 13));
        }
コード例 #7
0
        public ActionResult Parallel_Synchronous()
        {
            ViewBag.ExampleType = "Asynchronous examples - parallel synchronous code.";
            var asyncExamples = new AsyncExamples();

            asyncExamples.Parallel_Synchronous();
            return(View("AsyncExamples", 14));
        }
コード例 #8
0
 public void EndOfWorldCheckerTest()
 {
     // scope the shim otherwise it will fail, this is so it does not last forever.
     using (ShimsContext.Create())
     {
         var asyncClass = new AsyncExamples();
         ShimDateTime.NowGet = () => new DateTime(2000, 1, 1);
         asyncClass.CheckIfEndOfWorld();
     }
 }
コード例 #9
0
        public async Task <ActionResult> ReportProgress()
        {
            ViewBag.ExampleType = "Asynchronous examples - Reporting Progress.";
            var asyncExamples = new AsyncExamples();

            var progressIndicator = new Progress <ProgressIndicator>(ReportProgress);
            await asyncExamples.AsyncMethodWithProgress(progressIndicator);

            return(View("AsyncExamples", 10));
        }
コード例 #10
0
        public ActionResult Call_Async_Code_In_NonAsync_Context()
        {
            ViewBag.ExampleType = "Asynchronous examples - Call Async Code In A Non-Async Context.";
            var asyncExamples = new AsyncExamples();

            Debug.WriteLine("Because we are not in an async method, even though we do not await the return, we will still block the thread until it is completed.");
            asyncExamples.MultipleAwaitStatements();
            Debug.WriteLine("We won't get here until all four tasks in MultipleAwaitStatements have completed.");

            return(View("AsyncExamples", 10));
        }
コード例 #11
0
        public async Task <ActionResult> Fire_and_forget()
        {
            ViewBag.ExampleType = "Asynchronous examples - set off an 11-second call in a different context.";
            var asyncExamples = new AsyncExamples();

            // We will leave the request context AND we won't await the result.
            // This means the code will keep running even after we return a response to the browser.
            asyncExamples.Leave_The_Request_Context_In_All_Places();

            return(View("AsyncExamples", 10));
        }
コード例 #12
0
 public void XunitEndOfWorldCheckerTest()
 {
     // scope the shim otherwise it will fail, this is so it does not last forever.
     using (ShimsContext.Create())
     {
         var asyncClass = new AsyncExamples();
         ShimDateTime.NowGet = () => new DateTime(2001, 1, 1);
         // asyncClass.CheckIfEndOfWorld();
         Assert.Throws<Y2KException>(() => asyncClass.CheckIfEndOfWorld());
     }
 }
コード例 #13
0
        public void EndOfWorldCheckerProTest()
        {
            // scope the shim otherwise it will fail, this is so it does not last forever.
            using (ShimsContext.Create())
            {
                AsyncExamples asyncEx = new AsyncExamples();
                PrivateObject y2K = new PrivateObject(asyncEx);
                ShimDateTime.NowGet = () => new DateTime(2000, 1, 1);

                y2K.Invoke("CheckIfEndOfWorldProtectedMethod");

                //var asyncClass = new AsyncExamples();
                //ShimDateTime.NowGet = () => new DateTime(2000, 1, 1);
                //asyncClass.CheckIfEndOfWorld();
            }
        }
コード例 #14
0
        public async Task <ActionResult> CreateADeadlock()
        {
            ViewBag.ExampleType = "Asynchronous examples - Create a deadlock. This action will never complete!";
            var asyncExamples = new AsyncExamples();

            // It doesn't actually matter what method we call.
            // As long as it contains an await statement, we will get a deadlock.
            var task = asyncExamples.DeadlockExample();

            // Task.Result hides a Wait statement, which will lock the request context.
            // This means that the code in DeadlockExample() can never complete.
            var result = task.Result;

            System.Diagnostics.Debug.WriteLine("Because of the deadlock, this line of code will never be reached!");

            return(View("AsyncExamples", result));
        }
コード例 #15
0
        public async Task <ActionResult> Leave_The_Request_Context_In_All_Places()
        {
            ViewBag.ExampleType = "Asynchronous examples - Use ConfigureAwait(false) to leave the request context in all places";
            var asyncExamples = new AsyncExamples();

            // At this point the current http context and sychronization contexts are both populated.
            ContextHelper.OutputRequestAndSynchronizationContexts("Before ConfigureAwait(false): ");

            // In Leave_The_Request_Context_In_All_Places, we will also leave the request context
            var result = await asyncExamples.Leave_The_Request_Context_In_All_Places().ConfigureAwait(false);

            // We have now left the main request context (because we use ConfigureAwait(false) in the line above).
            // At this point the current http context and sychronization contexts are no longer populated.
            ContextHelper.OutputRequestAndSynchronizationContexts("After ConfigureAwait(false): ");

            // Note that even though we are no longer in the request context, the base controller class has kept
            // track of the response in its Response property, so we can still access the response in this class.
            Response.StatusCode = (int)HttpStatusCode.BadRequest;

            return(View("AsyncExamples", result));
        }
コード例 #16
0
        public async Task <ActionResult> ThisActionCanBeCancelled()
        {
            ViewBag.ExampleType = "Asynchronous examples - This Action Can Be Cancelled.";
            var asyncExamples = new AsyncExamples();

            var progressIndicator = new Progress <ProgressIndicator>(ReportProgress);

            try
            {
                _cancellationToken.Dispose();
                _cancellationToken = new CancellationTokenSource();
                await asyncExamples.AsyncMethodWithCancellation(
                    _cancellationToken.Token,
                    progressIndicator);
            }
            catch (Exception e)
            {
                ProgressHub.CancelProcessing(e.Message);
            }

            return(View("AsyncExamples", 10));
        }