• 异步编程


     并行处理是多线程的一种,而多线程是并发的一种。异步编程也是并发的一种形式,它采用future模式或回调机制,以避免产生不必要的线程。一个future(或promise)类型代表即将完成的操作。在.NET中,新版future类型有Task和Task<TResult>.

    关键字 await 不仅能用于任务,还能用于所有遵循特定模式的 awaitable 类型

    如果程序中有大量的计算任务,并且这些任务能分割成几个互相独立的任务块,那就应该使用并行编程。并行的形式有两种:数据并行(data parallelism)和任务并行(task parallelim).

    PLINQ(Parallel LINQ), 它为 LINQ 查询提供了 AsParallel 扩展。跟PLINQ 相比,Parallel 对资源更加友好,Parallel 与系统中的其他进程配合得比较好 , 而PLINQ 会试图让所有的 CPU 来执行本进程。Parallel 的缺点是它太明显。很多情况下,PLINQ 的代码更加优美.

    使用`Task.FromResult`实现一个具有异步签名的同步方法    

     1  interface IMyAsyncInterface
     2      {
     3        Task<int> GetValueAsync();
     4      }
     5      class MySynchronousImplementation : IMyAsyncInterface
     6      {
     7        public Task<int> GetValueAsync()
     8      {
     9         //创建并返回一个新的Task<T>对象,这个Task对象是已经完成的,并有指定的值
    10         return Task.FromResult(13);
    11      }
    12      }

      在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行。

    在async Task方法中引发的异常,存放在返回的Task对象中,只有当Task对象被await调用时,才会引发异常。因为 async void 方法没有返回 Task 对象,无法存放异常,所以做法就会不同,最好不要从 async void 方法传递出异常。如果必须使用 async void 方法,可考虑把所有代码放在 try 块中,直接处理异常。

  • 相关阅读:
    170322操作系统定义、功能、位置与历史
    java 多线程
    java 网络编程TCP程序设计
    java 事件处理机制
    java GUI编程
    170321php3第4章 PHP5的基本语法+作业九九乘法表
    170320网络编程 udpclient udpGroupClient
    二叉树线索化
    哈希表
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4677500.html
Copyright © 2020-2023  润新知