zoukankan      html  css  js  c++  java
  • 异步编程

     并行处理是多线程的一种,而多线程是并发的一种。异步编程也是并发的一种形式,它采用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 块中,直接处理异常。

  • 相关阅读:
    Web Components
    读《代码整洁之道》之我思
    JavaScript设计模式
    Vue项目一些常见问题的解决方案
    Vue中的样式穿透
    如何提升CSS性能
    script标签中,async和defer的区别?
    第二章:整车发动机激励--快速傅里叶变换
    第一章:整车发动机激励--之载荷分解(第一节)
    多点约束MPC-nastran
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4677500.html
Copyright © 2011-2022 走看看