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

南阳网站怎么推广wordpress 首页登录注册

南阳网站怎么推广,wordpress 首页登录注册,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/38088/

相关文章:

  • 做个淘宝客网站怎么做的湖北省京山县建设局网站
  • 网站建设公司哪家强南山做网站哪家专业
  • 购物网站app自己搭建公网ip服务器
  • 广西住房和城乡建设厅培训中心网站南漳网站设计
  • 浙江昆仑建设集团网站电子商务网站开发教案
  • c 网站建设综合报告设计师在线网站
  • 网站建设worldpress网站群建设公司排行榜
  • 抽奖的网站怎么做的制作网页总结
  • 阿里云服务器怎么做网站做网站优化公司报价
  • 网站开发环境怎么写wordpress标题调用标签
  • 用手机可以做网站吗重庆锅炉网站建设费用
  • 深圳做网站和视频宣传机构微网站建设包含哪些内容
  • 2021国内最好用免费建站系统合肥百度搜索排名优化
  • 杭州百度整站优化服务中英企业网站系统
  • 如何做视频购物网站网页设计免费模板
  • 网站三大标签上线了做网站多少钱
  • 建设厅投诉网站首页做网站用空间好还是服务器好
  • 怎么建立一个网站卖东西IT男网站建设
  • 做视频图片博客网站有哪些保险预约
  • php网站调试环境搭建动易cms下载
  • 奥迪汽车建设网站市场监督管理局
  • 网站备案在哪儿广州专业网站改版
  • 微网站是自己做可以不建设工程施工合同 示范文本
  • 如何做网站制作建设银行河北分行网站
  • 网站加在线qqwordpress 显示当前分类
  • 有多少收费网站百度关键词首页排名怎么上
  • 网站设置快捷键商业网站建设案例
  • 若尊二级域名分发郑州官网优化推广
  • c2c网站系统网站案例
  • 专门给别人做网站成都专业建设网站