仿别人网站,装潢设计是干嘛的,wordpress 帝国王,兰州需要做网站的公司有哪些一. FrameWork 4.0之前的线程世界 在.NET FrameWork 4.0之前#xff0c;如果我们使用线程。一般有以下几种方式#xff1a;
使用System.Threading.Thread 类#xff0c;调用实例方法Start()开启一个新线程#xff0c;调用Abort()方法来提前终止线程。使用System.T…一. FrameWork 4.0之前的线程世界 在.NET FrameWork 4.0之前如果我们使用线程。一般有以下几种方式
使用System.Threading.Thread 类调用实例方法Start()开启一个新线程调用Abort()方法来提前终止线程。使用System.Threading.ThreadPool类调用静态方法QueueUserWorkItem()将方法放入线程池队列线程池来控制调用。使用BeginInvoke,EndInvoke,BeginRead,EnRead,BeginWrite,EndWrite等一系列的异步方法。使用System.ComponentModel.BackgroundWorker控件调用实例方法RunWorkerAsync()开启一个新线程。
二. .Net 传统异步编程概述
异步编程模型 (APM)在该模型中异步操作由一对 Begin/End 方法如 FileStream.BeginRead 和 Stream.EndRead表示。基于事件的异步模式 (EAP)在该模式中异步操作由名为“操作名称Async”和“操作名称Completed”的方法/事件对例如 WebClient.DownloadStringAsync 和 WebClient.DownloadStringCompleted表示。 EAP 是在 .NET Framework 2.0 版中引入的,在silverlight或者wpf变成中经常用到。
三. Task 的优点以及功能
在任务启动后可以随时以任务延续的形式注册回调。通过使用 ContinueWhenAll 和 ContinueWhenAny 方法或者 WaitAll 方法或 WaitAny 方法协调多个为了响应 Begin_ 方法而执行的操作。在同一 Task 对象中封装异步 I/O 绑定和计算绑定操作。监视 Task 对象的状态。使用 TaskCompletionSource 将操作的状态封送到 Task 对象。
四. TASK的用法 请参考这篇文章
五. 使用 Task 封装常见的异步编程模式
使用Task封装APM异步编程模式。C#5.0中提供的async和await使异步编程更简单。await在msdn的解释是“运算符应用于一个异步方法的任务挂起方法的执行直到等待任务完成。 任务表示正在进行的工作。”它返回的结果是Task和TaskTResult.下面我们就用一个demo具体解析private async void Init(){//部分代码省略var orgs await _serviceClient.GetAllOrganizationTaskAsync();} //通过WCF调用采取分布类名称一样。public partial class ServiceClient{public TaskObservableCollectionOrganization GetAllOrganizationTaskAsync(){//Task 封装APMreturn TaskObservableCollectionOrganization.Factory.FromAsync(this.Channel.BeginGetAllOrganization, this.Channel.EndGetAllOrganization, null);}}使用 Task 对象封装 EPM 异步模式 。 这种模式从 .Net 2.0 开始出现 同时在 Silverlight 中大量出现 这种异步模式以 “操作名称Async” 函数和 “操作名称Completed” 事件成对出现为特征。常见的操作有使用lamda表达式或者使用“操作名称Completed”tip如果使用lamda表达式无法回收资源如果同时调用多个数据会乱套建议如果非要用最好用“操作名称Completed”在操作名称Completed事件中再-“操作名称Completed”。 关键字TaskCompletionSource简单理解委托给task属性利用task来操作。var source new TaskCompletionSourcestring(); var webClient new WebClient(); webClient.DownloadStringCompleted (sender, args) { if (args.Cancelled) { source.SetCanceled(); return; } if (args.Error ! null) { source.SetException(args.Error); return; } source.SetResult(args.Result); }; webClient.DownloadStringAsync(new Uri(UrlToTest, UriKind.Absolute), null); source.Task.Wait(); var result source.Task.Result;此博客来自于http://www.cnblogs.com/luqixinhe/archive/2013/07/18/3197645.html记录时为了更好的学习。