当前位置: 首页 > news >正文

邯郸超速云_网站建设wordpress 标签 图片不显示图片

邯郸超速云_网站建设,wordpress 标签 图片不显示图片,做公司官网需要多少钱,网站手机端做排名返回该系列目录《基于Task的异步模式--全面介绍》 Tasks和异步编程模型APM(Tasks and the Asynchronous Programming Model) 从APM到Tasks APM模式依赖两个对应的方法来表示一个异步操作#xff1a;BeginMethodName和EndMethodName。在高级别#xff0c;begin方法接受的参数和…返回该系列目录《基于Task的异步模式--全面介绍》 Tasks和异步编程模型APM(Tasks and the Asynchronous Programming Model) 从APM到Tasks APM模式依赖两个对应的方法来表示一个异步操作BeginMethodName和EndMethodName。在高级别begin方法接受的参数和相应的同步方法MethodName的参数是一样的而且还接受一个AsyncCallback和一个object state。begin方法然后返回IAsyncResult,IAsyncResult从它的AsyncState属性返回传递给begin方法的object state。异步操作完成时IAsyncResult的IsCompleted属性会开始返回true且会设置它的AsyncWaitHandle属性。而且如果begin方法的AsyncCallback参数是非空的那么会调用callback且将它传给从begin方法返回的相同的IAsyncResult。当异步操作确实完成时会使用EndMethodName方法连接该操作检索任何结果或者强制产生的异常传播。 由于APM模式结构的本质构建一个APM的包装器来将它暴露为一个TAP实现是相当容易的。实际上.Net Framework 4 以TaskFactory.FromAsync的形式提供了转化的帮助路线。 思考.Net 中的Stream类和BeginRead/EndRead 方法它们都代表了同步的Read方法的APM对应版本 public int Read(byte [] buffer, int offset, int count); … public IAsyncResult BeginRead(byte [] buffer, int offset, int count, AsyncCallback callback, object state); public int EndRead(IAsyncResult asyncResult); 利用FromAsycn,可实现该方法的TAP包装器 public static Taskint ReadAsync(this Stream stream, byte [] buffer, int offset, int count) {if (stream null) throw new ArgumentNullException(“stream”);return Taskint.Factory.FromAsync(stream.BeginRead, stream.EndRead,buffer, offset, count, null); } 这个使用了FromAsync的实现和下面的具有同样效果 public static Taskint ReadAsync(this Stream stream, byte [] buffer, int offset, int count) {if (stream null) throw new ArgumentNullException(“stream”);var tcs new TaskCompletionSourceint();stream.BeginRead(buffer, offset, count, iar {try { tcs.TrySetResult(stream.EndRead(iar)); }catch(OperationCanceledException) { tcs.TrySetCanceled(); }catch(Exception exc) { tcs.TrySetException(exc); }}, null);return tcs.Task; } 从Tasks到APM 对于现有的基础设施期望代码实现APM模式的场合能够采取TAP实现以及在期待TAP实现的地方使用它也是很重要的。幸好有了tasks的组合性以及Task本身实现IAsyncResult的事实使用一个简单的帮助函数就可以实现了这里展示的是一个TaskTResult的扩展但几乎相同的函数可能用于非泛型的Task   public static IAsyncResult AsApmT(this TaskT task, AsyncCallback callback, object state) {if (task null) throw new ArgumentNullException(“task”);var tcs new TaskCompletionSourceT(state);task.ContinueWith(t {if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions)else if (t.IsCanceled) tcs.TrySetCanceled();else tcs.TrySetResult(t.Result);if (callback ! null) callback(tcs.Task);}, TaskScheduler.Default);return tcs.Task; } 现在想一个有TAP实现的场合 public static Taskstring DownloadStringAsync(Uri url); 且我们需要提供APM实现 public IAsyncResult BeginDownloadString(Uri url, AsyncCallback callback, object state); public string EndDownloadString(IAsyncResult asyncResult); 可以通过下面代码实现 public IAsyncResult BeginDownloadString(Uri url, AsyncCallback callback, object state) {return DownloadStringAsync(url).AsApm(callback, state); }public string EndDownloadString(IAsyncResult asyncResult) {return ((Taskstring)asyncResult).Result; }   Tasks和基于事件的异步模式EAPEvent-based Asynchronous Pattern 基于事件的异步模式依赖于一个返回void的实例MethodNameAsync方法接收和同步方法MethodName方法相同的参数并且要实例化异步操作。实例异步操作之前事件句柄使用相同实例上的事件注册然后触发这些事件来提供进度和完成通知。事件句柄一般都是自定义的委托类型该委托类型利用了派生自ProgressChangedEventArgs或AsyncCompletedEventArgs的事件参数类型。 包装一个EAP实现更复杂一些因为该模式本身牵扯了比APM模式更多的变量和更少的结构。为了演示接下来包装一个DownloadStringAsync方法。DownloadStringAsync接受一个Uri参数为了上报多个进度上的统计数据下载时会触发DownloadProgressChanged 事件完成时会触发DownloadStringCompleted 事件。最终结果是一个包含在指定Uri的页面内容的字符串。 public static Taskstring DownloadStringAsync(Uri url) {var tcs new TaskCompletionSourcestring();var wc new WebClient();wc.DownloadStringCompleted (s,e) {if (e.Error ! null) tcs.TrySetException(e.Error);else if (e.Cancelled) tcs.TrySetCanceled();else tcs.TrySetResult(e.Result);};wc.DownloadStringAsync(url);return tcs.Task; } Tasks和等待句柄WaitHandlers 从WaitHandlers到Tasks 高级的开发人员可能会发现WaitHandle 设置时自己利用 WaitHandles 和线程池的 RegisterWaitForSingleObject 方法进行异步通知然而这本质上不是一个异步模式 。我们可以包装RegisterWaitForSingleObject来启用WaitHandle之上的任何异步等待的基于task的选择 public static Task WaitOneAsync(this WaitHandle waitHandle) {if (waitHandle null) throw new ArgumentNullException(waitHandle);var tcs new TaskCompletionSourcebool();var rwh ThreadPool.RegisterWaitForSingleObject(waitHandle, delegate { tcs.TrySetResult(true); }, null, -1, true);var t tcs.Task;t.ContinueWith(_ rwh.Unregister(null));return t; } 使用那些之前演示的构建于Task之上的数据结构的技巧相似地构建一个不依赖WaitHandles且完全以Task的角度工作的异步信号灯semaphore也是可能的。事实上.Net 4.5中的SemaphoreSlim 类型暴露了开启这个的WaitAsync方法。 比如之前提到的System.Threading.Tasks.Dataflow.dll中的BufferBlockT类型可以这样使用 static SemaphoreSlim m_throttle new SemaphoreSlim(N, N);static async Task DoOperation() {await m_throttle.WaitAsync();… // do workm_throttle.Release (); } 从Tasks到WaitHandlers 如之前提到的Task类实现了IAsyncResult该IAsyncResult的实现暴露了一个返回WaitHandle的AsycnWaitHandle属性此WaitHandle是在Task完成时设置的。照这样获得一个Task的WaitHandle可以像下面这样实现 WaitHandle wh ((IAsyncResult)task).AsyncWaitHandle;   返回该系列目录《基于Task的异步模式--全面介绍》
http://www.pierceye.com/news/865249/

相关文章:

  • 关于网站开发人员的薪资易语言怎么做无限打开网站
  • 网站备案名称几个字企业网站定制案例
  • 新浪云服务器做网站重庆建设厅官方网站
  • 苏州市住房和城乡建设局官方网站郑州专业旅游网站建设
  • 网站免费正能量直接进入浏览器下载安装公开课网站建设
  • 个人做电影网站合法吗网页制作与网站建设完全学习手册下载
  • 椒江做网站wordpress的分类
  • 新手做网站应该注意什么重庆市建设工程造价信息网公众号
  • 网址输入奉化seo页面优化外包
  • 坪山商城网站建设哪家效益快教务管理系统是应用软件吗
  • 深圳网站搭建找谁怎么在手机上制作app
  • 做app和做网站的区别桂林市天气预报15天
  • 高端织梦html5网站模板 dedecms网络公司模板关键词排名优化方法
  • 上海网站建设咨找个网站2021能看到
  • 可以用服务器做网站查询公司信息
  • 个人可以备案企业网站吗旅行社网站 模板
  • 三丰云做网站步骤网站怎么上传ftp
  • 做二手车有哪些网站有哪些手续网站建设单位有哪些方面
  • 建设网站的和服务器常州免费网站制作
  • 电子外贸网站重庆有什么好玩的
  • 商务网站的建设阶段包括郑州的做网站公司哪家好
  • 深圳网站建设网络公司七星彩网投网站建设
  • 手机建网站公司wordpress增加关键字
  • 招聘网站有哪些平台电商网站建设方式
  • 网站的备案要求域名icp备案查询
  • 网站的投资和建设项目站群服务器
  • 建网站电脑版和手机版怎么做网页实训总结及心得体会
  • 网站建设咨询费用一流的网站建设流程图
  • 如何进行营销型企业网站的优化如何在百度上推广自己
  • 360怎么变成建设银行首选网站网站建设财务分析