异步编程

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

posted @ 2015-07-26 13:10  senki  阅读(176)  评论(0编辑  收藏  举报