zoukankan      html  css  js  c++  java
  • 第十三章 异步编程

    Foundations

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Threading;
    
    namespace Foundations
    {
      class Program
      {
        static void Main()
        {
          var ctx = new DispatcherSynchronizationContext();
    
          // SynchronizationContext.SetSynchronizationContext(ctx);
          // CallerWithAsync();
          // CallerWithContinuationTask();
          // CallerWithAwaiter();
          // MultipleAsyncMethods();
          // MultipleAsyncMethodsWithCombinators1();
          //   MultipleAsyncMethodsWithCombinators2();
          ConvertingAsyncPattern();
          Console.ReadLine();
    
    
        }
    
        private static async void ConvertingAsyncPattern()
        {
          string r = await Task<string>.Factory.FromAsync<string>(BeginGreeting, EndGreeting, "Angela", null);
          Console.WriteLine(r);
        }
    
    
        private async static void MultipleAsyncMethods()
        {
          string s1 = await GreetingAsync("Stephanie");
          string s2 = await GreetingAsync("Matthias");
          Console.WriteLine("Finished both methods.
     Result 1: {0}
     Result 2: {1}", s1, s2);
        }
    
        private async static void MultipleAsyncMethodsWithCombinators1()
        {
          Task<string> t1 = GreetingAsync("Stephanie");
          Task<string> t2 = GreetingAsync("Matthias");
          await Task.WhenAll(t1, t2);
          Console.WriteLine("Finished both methods.
     Result 1: {0}
     Result 2: {1}", t1.Result, t2.Result);
        }
    
        private async static void MultipleAsyncMethodsWithCombinators2()
        {
          Task<string> t1 = GreetingAsync("Stephanie");
          Task<string> t2 = GreetingAsync("Matthias");
          string[] result = await Task.WhenAll(t1, t2);
          Console.WriteLine("Finished both methods.
     Result 1: {0}
     Result 2: {1}", result[0], result[1]);
        }
    
        private static void CallerWithContinuationTask()
        {
          Console.WriteLine("started CallerWithContinuationTask in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
    
          var t1 = GreetingAsync("Stephanie");
    
    
          t1.ContinueWith(t =>
            {
              string result = t.Result;
              Console.WriteLine(result);
              Console.WriteLine("finished CallerWithContinuationTask in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
            });
    
        }
    
        private static void CallerWithAwaiter()
        {
          Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
          string result = GreetingAsync("Matthias").GetAwaiter().GetResult();
          Console.WriteLine(result);
          Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
        }
    
        private async static void CallerWithAsync()
        {
          Console.WriteLine("started CallerWithAsync in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
          string result = await GreetingAsync("Stephanie");
          Console.WriteLine(result);
          Console.WriteLine("finished GreetingAsync in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
        }
    
        private async static void CallerWithAsync2()
        {
          Console.WriteLine("started CallerWithAsync in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
          Console.WriteLine(await GreetingAsync("Stephanie"));
          Console.WriteLine("finished GreetingAsync in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
        }
    
        static Task<string> GreetingAsync(string name)
        {
          return Task.Run<string>(() =>
            {
              Console.WriteLine("running greetingasync in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
              return Greeting(name);
            });
        }
    
        static string Greeting(string name)
        {
          Console.WriteLine("running greeting in thread {0} and task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
    
          Thread.Sleep(3000);
          return string.Format("Hello, {0}", name);
        }
    
        private static Func<string, string> greetingInvoker = Greeting;
    
        static IAsyncResult BeginGreeting(string name, AsyncCallback callback, object state)
        {
          return greetingInvoker.BeginInvoke(name, callback, state);
        }
    
        static string EndGreeting(IAsyncResult ar)
        {
          return greetingInvoker.EndInvoke(ar);
        }
    
      }
    }
    View Code
  • 相关阅读:
    Node.js安装及环境配置之Windows篇
    盘点.NET JIT在Release下由循环体优化所产生的不确定性Bug
    开源!一款功能强大的高性能二进制序列化器Bssom.Net
    开源 , KoobooJson一款高性能且轻量的JSON框架
    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
    .Net Web开发技术栈
    web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。
    .Net高级进阶,教你如何构建企业模型数据拦截层,动态控制字段验证
    .Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)
    .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?
  • 原文地址:https://www.cnblogs.com/liuslayer/p/7146060.html
Copyright © 2011-2022 走看看