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

织梦mip网站改造做网站销售怎么做

织梦mip网站改造,做网站销售怎么做,南京网站制作步骤,工作室网站备案今天在看同事新买到的《C#本质论 Edition 4》的时候#xff0c;对比下以前Edtion3的新特性时#xff0c;针对Async/Await关键字时发现对一些线程方面的定义还理解的不是很透彻#xff0c;脉络还不是很清晰#xff0c;这样有了本文#xff0c;希望对有同样困惑的朋友有些帮…  今天在看同事新买到的《C#本质论 Edition 4》的时候对比下以前Edtion3的新特性时针对Async/Await关键字时发现对一些线程方面的定义还理解的不是很透彻脉络还不是很清晰这样有了本文希望对有同样困惑的朋友有些帮助。 文中部分内容摘取自《Essential C# 5.0 Edition 4》还有一些我个人的对线程方面知识的理解与概括如果有错误的地方还请指出如果您觉得文章还不错请点击“推荐” C#线程模型脉络 缩写 SPMSynchronous Programming Mode同步编程模型。 APMAsynchronous Programming Mode异步编程模型。.Net 1.x的版本可以使用 EAPEvent-Based Asynchronous Programming基于事件的异步编程。.Net Framework2.0中引入 TAPTask-Based Asynchronous Programming基于任务的异步编程。.Net Framework4.0中引入 C#的编程模型从SPM发展到APM编程模型是Winform发展过程中解决界面由于同步执行长时间任务而导致界面“卡住”而发展而来这里插一句个人对技术的理解技术的发展总是在旧事物不能得到满足的情况下发展而来新事物总是在特定的场合“出现”并更好的代替了旧事物所以如果想了深入了解一个新事物的特性必然要了解其发展脉络以及适用的场景有了异步编程模式之后人们又开始探索如何能更好的管理线程更简单的适用于是有了类似Background Worker和async/await一类的特性。 C#线程的编程模型到这里也就结束了如果你有这方面的经验可能都觉得以上都是“废话”或者“一言以概之”的确我不反对但是有时候写文章有些时候不仅仅是炫耀技术更多的是总结、归纳理解的东西不一定说的出来说出来的东西不一定真正理解 下面针对每个内容做一个小结老鸟飞过 SPM同步编程模型 Winform程序基于消息泵机制依次执行从“消息泵”中取出的数据”当某一消息需耗费大量系统资源去执行则下一条消息不得不等待这样会造成程序界面“挂起”这就是同步执行任务的一种模型当然这只是同步模型下的一种劣势其实现实中我们同步模型我们无时无刻不在用包括编写的代码、执行的业务逻辑等。 APM异步编程模型 为了解决同步模型中由于执行耗时任务而不得不等待的问题产生了异步编程模式其核心思想就是将耗时任务交付给其他“线程”去做释放主线程。这里多出两句在操作系统级别上Windows采用分时、多核以及多线程等技术来充分利用系统资源在C#语言上由Thread发展到TaskTask是更高级的对Thread封装提升资源利用率有了这些基础才有更广阔的空间。 BeginXXX和EndXXX 使用BeginXXX和EndXXX实现基本的异步模式。 class Program{static void Main(string[] args){string url http://www.cnblogs.com/cuiyansong/;if (args.Length 0)url args[0];Console.WriteLine(url);var webRequest System.Net.WebRequest.Create(url);IAsyncResult asyncResult webRequest.BeginGetResponse(null, null);while (!asyncResult.AsyncWaitHandle.WaitOne(200)){Console.WriteLine(.);}var webResponse webRequest.EndGetResponse(asyncResult);using (System.IO.StreamReader reader new System.IO.StreamReader(webResponse.GetResponseStream())){var bytes Encoding.UTF8.GetBytes(reader.ReadToEnd());int length bytes.Length;Console.WriteLine(length);}Console.Read();}} TPLAPM模式 TPLTask Parallel Library 任务并行库其对task进行扩展类似于ThreadPool。 这个模式是利用TaskFactory进行并行计算下载的例子这个例子很有意思很复古的感觉有情趣的拷贝代码看看运行效果~~~ class Program{private static object ConsoleSyncObj new object();static void Main(string[] args){string[] urls args;if (args.Length 0){urls new string[]{http://www.cnblogs.com/cuiyansong/,https://github.com/Cuiyansong,http://www.cnblogs.com/,};}Task[] tasks new Task[urls.Length];for (int i 0; i tasks.Length; i){tasks[i] DisplayPageSizeAsync(urls[i], i);}while (!Task.WaitAll(tasks, 50)){DisplayProgress(tasks);}Console.SetCursorPosition(0, urls.Length);Console.Read();}private static void DisplayProgress(Task[] tasks){for (int i 0; i tasks.Length; i){if (!tasks[i].IsCompleted){DisplayProgress((WebRequestState)tasks[i].AsyncState);}}}private static void DisplayProgress(WebRequestState state){lock (ConsoleSyncObj){int left state.ConsoleColumn;int top state.ConsoleLine;if (left Console.BufferWidth - int.MaxValue.ToString().Length){left state.Url.Length;Console.SetCursorPosition(left, top);Console.Write(.PadRight(Console.BufferWidth - state.Url.Length));state.ConsoleColumn left;}Write(state, .);}}private static string FormatBytes(long bytes){string[] magintudes new string[] { GB, MB, KB, Bytes };long max (long)Math.Pow(1024, magintudes.Length);return string.Format({1:##.##} {0}, magintudes.FirstOrDefault(mag bytes (max / 1024)) ?? 0 Bytes, (decimal)bytes / (decimal)max).Trim();}private static TaskSystem.Net.WebResponse DisplayPageSizeAsync(string url, int i){var webRequest System.Net.WebRequest.Create(url);var requestState new WebRequestState(webRequest, i);Write(requestState, url );return TaskSystem.Net.WebResponse.Factory.FromAsync(webRequest.BeginGetResponse, GetResponseAsyncCompleted, requestState);}private static WebResponse GetResponseAsyncCompleted(IAsyncResult asyncResult){WebRequestState completedState (WebRequestState)asyncResult.AsyncState;HttpWebResponse response (HttpWebResponse)completedState.WebRequest.EndGetResponse(asyncResult);using (StreamReader reader new StreamReader(response.GetResponseStream())){int length reader.ReadToEnd().Length;Write(completedState, FormatBytes(length));}return response;}private static void Write(WebRequestState completedState, string text){lock (ConsoleSyncObj){Console.SetCursorPosition(completedState.ConsoleColumn, completedState.ConsoleLine);Console.Write(text);completedState.ConsoleColumn text.Length;}}private class WebRequestState{public System.Net.WebRequest WebRequest { get; private set; }public int ConsoleLine { get; set; }public int ConsoleColumn { get; set; }public string Url{get{return WebRequest.RequestUri.ToString();}}public WebRequestState(System.Net.WebRequest request){WebRequest request;}public WebRequestState(System.Net.WebRequest request, int line){WebRequest request;ConsoleLine line;ConsoleColumn 0;}}} BackgroundWorker模型 针对经常出现任务委托后执行任务并返回进度的需求提供了BackgroundWorker类节省开发时间。 class Program{static void Main(string[] args){/****************************************************************************** 由于是演示并为增加对BackgroundWorker取消等功能,这里只是简单演示。* 详细请参考http://www.cnblogs.com/RoyYu/archive/2011/08/10/2133309.html* ***************************************************************************/System.ComponentModel.BackgroundWorker worker new System.ComponentModel.BackgroundWorker();worker.WorkerReportsProgress true;//报告完成进度worker.WorkerSupportsCancellation true;//允许用户终止后台线程worker.DoWork (sender, e) {for (int i 0; i 10; i){System.Threading.Thread.Sleep(500);worker.ReportProgress(i, i);}};worker.ProgressChanged (sender, e) {Console.WriteLine(string.Format(完成百分比。。。{0}, e.ProgressPercentage / (float)10));};worker.RunWorkerCompleted (sender, e) {if (!e.Cancelled e.Error null){Console.WriteLine(处理成功请按任意键返回。);}else{Console.WriteLine(处理中断请按任意键返回。);}};worker.RunWorkerAsync();Console.Read();}} Async/Await模型 这回用窗体程序进行演示对比起来效果会更明显些。 public partial class MainWindow : Window{Liststring urls new Liststring();public MainWindow(){InitializeComponent();urls new Liststring(){www.baidu.com,www.cnblogs.cn,www.stackoverflow.com,};}/// summary/// 同步执行示例当点击Button后界面挂起等待执行完毕后显示全部内容。/// /summary/// param namesender/param/// param namee/paramprivate void Button_Click1(object sender, RoutedEventArgs e){InfoList.Text Ping..... System.Environment.NewLine;Ping p new Ping();foreach (var item in urls){PingReply pingRelay p.Send(item);InfoList.Text string.Format(Host Name: {0},Roundtrip Time: {1},Status: {2}, item, pingRelay.RoundtripTime.ToString(), pingRelay.Status System.Environment.NewLine);}}/// summary/// 异步执行示例当点击Button后界面不挂起界面滚动显示信息。/// /summary/// param namesender/param/// param namee/paramprivate async void Button_Click2(object sender, RoutedEventArgs e){InfoList.Text Ping..... System.Environment.NewLine;Ping p new Ping();foreach (var item in urls){PingReply pingRelay await p.SendPingAsync(item);InfoList.Text string.Format(Host Name: {0},Roundtrip Time: {1},Status: {2}, item, pingRelay.RoundtripTime.ToString(), pingRelay.Status System.Environment.NewLine);}}} 结语 下载源代码请点击这里。 文章内容确实不是很深入但对理解Winform的异步线程模型还是很有帮助的今后有时间会针对线程单独来分享希望各位看官不吝赐“赞”水平有限有问题欢迎提问 引用 文中部分例子出自《Essential C# 5.0 Edition 4》BackgrounWorker例子http://www.cnblogs.com/RoyYu/archive/2011/08/10/2133309.html作者Stephen Cui  出处http://www.cnblogs.com/cuiyansong 版权声明文章属于本人及博客园共有凡是没有标注[转载]的请在文章末尾加入我的博客地址。  如果您觉得文章写的还不错请点击“推荐一下”谢谢。
http://www.pierceye.com/news/460088/

相关文章:

  • 揭阳企业做网站淮安做网站
  • 怎么给餐饮店做网站用织梦做企业网站
  • 技术支持 创思佳网站建设如何制作自己的网站
  • 济南网站建设公司晟创未来wordpress xml插件
  • 前端做商城网站需要多久实训课网站开发个人小结
  • 南宁网站seo排名优化手机网站制作架构
  • 亿唐网不做网站做品牌案例分析seo 推广服务
  • 深圳网站建设服务器如何编写一份网站开发需求文档
  • 营销网站策划wordpress主题在线汉化插件下载
  • 深圳市网站开发个人养老保险金怎么交
  • 超炫html5网站模板新手做网站怎么上传系统
  • 一个网站的二级目录在另一台服务器上_怎么做网络营销工程师前景
  • 个人网站推广软件企业网站建设变相收取等级保护费6
  • 有没有一些网站可以做问卷个人网站 服务器
  • 网站前端WordPress怎么自定义页眉
  • 常州企业免费建站秦皇岛市住房公积金管理中心
  • 网站建设网站需要什么软件有哪些使用wordpress开发一个页面
  • 贵溪市城乡建设局网站手机网站推荐
  • wordpress多站点的路径深圳龙岗区宝龙街道
  • 做外贸免费发布产品的网站装修软件app哪个好
  • 网站注册系统医疗器械分类目录2021
  • 珠海建设网站百度收录有什么好处
  • 二手网站专业做附近人的有吗免费申请网站永久
  • 校园二手市场网站开发网站文章优化流程方案
  • 手机网站的必要性衡水网站设计费用
  • 厦门市建设安全管理协会网站网站登录模板下载
  • 江苏启安建设集团有限公司网站wordpress图标字体不显示不出来
  • 网络营销网站规划建设实训作业免费云空间
  • 杭州建设网站官网想学做宝宝食谱上什么网站
  • 用自己服务器做网站乡镇信息公开网站建设制度