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

seo外贸网站建设上海建设执业资格注册中心网站

seo外贸网站建设,上海建设执业资格注册中心网站,建设银行网站 个人客户,网站建设合同英文我这里针对现有的C#多线程技术进行一个汇总#xff0c;一是复习#xff0c;二是方便索引#xff0c;文章部份知识点来源于网络#xff0c;非本人原创。 一、并行#xff08;异步#xff09;#xff1a; 1.System.Threading.Tasks命名空间下的(TPL)#xff1a; 1.1…我这里针对现有的C#多线程技术进行一个汇总一是复习二是方便索引文章部份知识点来源于网络非本人原创。 一、并行异步 1.System.Threading.Tasks命名空间下的(TPL) 1.1Parallel.Invoke --并行执行多个任务主线程等待并行执行完毕后才开始续续运行。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 static void Main(string[] args) {     Parallel.Invoke(new ParallelOptions() { MaxDegreeOfParallelism2},Run1,Run2);     Console.WriteLine(我是主线程);     Console.Read(); } static void Run1() {     Console.WriteLine(我是任务一,我运行3s);     Thread.Sleep(3000);     Console.WriteLine(任务一执先完成); } static void Run2() {     Console.WriteLine(我是任务二我运行5s);     Thread.Sleep(5000);     Console.WriteLine(任务二执先完成); } 1.2Parallel.For--循环迭代多个任务多个任务之间存在并行情况主线程等待循环迭代的多个任务执行完毕后才开始续续运行。 示例 1 2 3 4 5 Parallel.For(0, 10, (i) {                 Console.WriteLine(我是第{0}个任务线程ID是{1},i,Thread.CurrentThread.ManagedThreadId);                 Thread.Sleep(new Random().Next(10) * 10 * 500);                 Console.WriteLine(线程ID是{0}执行完成, Thread.CurrentThread.ManagedThreadId);             }); 1.3Parallel.ForEach--循环迭代多个任务多个任务之间存在并行情况主线程等待循环迭代的多个任务执行完毕后才开始续续运行。注意它有多个重载方法 示例 1 2 3 4 5 6 7 8 9 10 11 var bag  new ConcurrentBagint(); Parallel.ForEach(Partitioner.Create(0, 100), i {     for (int m i.Item1; m i.Item2; m)     {         bag.Add(m);         Console.WriteLine(我是第{0}个任务线程ID是{1}, m, Thread.CurrentThread.ManagedThreadId);     } }); Console.WriteLine(并行计算集合有:{0}, bag.Count); 1.4TAP(基于任务的异步编)使用Task类 注意默认任务开启后会在新线程中执行主线程不会等待任务而是继续下面的执行若使用Task.WaitAll则会等待相应的任务完成后才会执行 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //第一种方式启动 var task1  new Task(()  //实例化             {                 Run1();             }); task1.Start(); //启动  //第二种方式开启  var task2 Task.Factory.StartNew(()  //直接创建任务并启动             {                 Run2();             }); //主线程等待任务执行完  Task.WaitAll(task1, task2); 2.ParallelEnumerable类中的扩展方法先将枚举对象使用AsParallel转换成ParallelQuery类型然后就可以使用ParallelQuery在ParallelEnumerable类相关的扩展方法 示例 1 2 var resultList testList.AsParallel().Where(ii100).ToList();  Console.WriteLine(resultList Count:{0}, resultList.Count); 3.创建新Thread--新线程启动后主线程与创建的线程各自执行若需要主线程等待异步线程执行完成后才执行则应使用asyncThread.Join方法。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19         static void AsyncThreadMethod()         {             Console.WriteLine(我是异步执行线程线程ID是{0}, Thread.CurrentThread.ManagedThreadId);         }         static void AsyncThreadMethod(object state)         {             Console.WriteLine(我是异步执行线程线程ID是{0},状态{1}, Thread.CurrentThread.ManagedThreadId,state);         } //创建线程并执行             Thread asyncThread  new Thread(new ThreadStart(AsyncThreadMethod));             asyncThread.IsBackground  true;             asyncThread.Start();             Thread asyncThread2  new Thread(new ParameterizedThreadStart(AsyncThreadMethod));             asyncThread2.IsBackground  true;             asyncThread2.Start(这是来自主线程的参数); 4.使用ThreadPool.QueueUserWorkItem静态方法--WaitCallback回调方法要求其必需带一个object的参数 示例 1 2 3 ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncThreadMethod));//不带参数则系统将state自动设为null ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncThreadMethod), 这是来自主线程的参数); 5.APM(异步编程模型)利用BeginInvoke与EndInvoke完成异步执行委托方法 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Funcstring, string funcDelegate (s) {     Console.WriteLine(我是Func委托方法);     return 委托方法参数  s; }; //1.无阻塞异步回调 var aysncResult funcDelegate.BeginInvoke(这是来自主线程的参数, new AsyncCallback((result) {     //获取委托对象调用EndInvoke方法获取运行结果     AsyncResult _result (AsyncResult)result;     var func (Funcstring, string)_result.AsyncDelegate;     string data func.EndInvoke(_result);     Console.WriteLine(data ,附加参数  _result.AsyncState.ToString()); }),其它参数); //2.阻塞主线程使主线程等待执行完毕 string data2  null; var aysncResult2 funcDelegate.BeginInvoke(这是来自主线程的参数2, null, null); data2 funcDelegate.EndInvoke(aysncResult2);//第一种阻塞方法 while (!aysncResult2.IsCompleted) //第二种阻塞方法 {     Thread.Sleep(200);      //虚拟操作     Console.WriteLine(主线程等待...); } data2 funcDelegate.EndInvoke(aysncResult2); WaitHandle[] waitHandles  new WaitHandle[]{ aysncResult2.AsyncWaitHandle }; while (WaitHandle.WaitAll(waitHandles, 5000)) //第三种阻塞方法 {     Console.WriteLine(主线程等待...); } 6. EAP(基于事件的异步编程)--主要用在客户端应用程序中 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //例子一 var client  new WebClient(); client.DownloadProgressChanged  delegate(object s, DownloadProgressChangedEventArgs e) {     Console.WriteLine(Download Percent:{0}, e.ProgressPercentage); }; client.DownloadStringCompleted  delegate(object s,DownloadStringCompletedEventArgs e){     Console.WriteLine(Download Content Length:{0},e.Result.Length);     Console.WriteLine(Download Completed!); }; client.DownloadStringAsync(new Uri(http://www.zuowenjun.cn)); //例子二 BackgroundWorker worker  new BackgroundWorker(); worker.DoWork (s, e) {     Console.WriteLine(异步执行中。。。); }; worker.RunWorkerCompleted (s, e) {     Console.WriteLine(异步执行完成。。。); }; worker.RunWorkerAsync(); 7.async和await关键字 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20     public Taskdouble GetValueAsync(double num1, double num2)     {         return Task.Run(()         {             for (int i 0; i 1000000; i)             {                 num1 num1 / num2;             }             return num1;         });     }     public async void DisplayValue()     {         double result await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务然后方法马上返回         //这之后的所有代码都会被封装成委托在GetValueAsync任务完成时调用         System.Diagnostics.Debug.WriteLine(Value is :   result);     } //调用 DisplayValue();//不会阻塞主线程  参考以下相关文章 C#综合揭秘——细说多线程上 C#综合揭秘——细说多线程下 8天玩转并行开发系列文章 .NET基础拾遗5多线程开发基础转载于:https://www.cnblogs.com/wzg168/p/8559500.html
http://www.zqtcl.cn/news/595244/

相关文章:

  • 国际物流公司网站建设有关应用网站
  • 网站后台维护技能娱乐公司网站模板
  • 有建网站的公司吗p2p理财网站开发要求
  • 做私单的网站高端html5网站设计工作室织梦模板 dedecms5.7
  • 视频网站切片怎么做如何做网站结构及栏目策划
  • 公司和网站备案查询龙江网站建设公司
  • 建一个平台网站需要多少钱安徽网站建设大全
  • 做网站接广告网站注册页面怎么做
  • 西安建站价格表电脑做视频的网站比较好
  • 建筑中级职称查询网站百度指数功能模块
  • 建设网站只慧聪网怎样做网站友情链接
  • 德阳网站开发dedecms5.7装饰公司网站模板
  • 下步我院将建设网站信息保密浙江温州网络公司
  • 一键建站网站seo关键词快速排名介绍
  • 自己做网站 什么wordpress博客文章加密
  • 怎样做音视频宣传网站wordpress 推送
  • 网站图片上传代码专业的企业进销存软件定制
  • 商品网站模板wordpress文章推荐
  • 十里堡网站建设做吃的教程网站
  • 比较好的源码网站河南网站seo推广
  • 做网站推广什么好网站界面结构
  • 龙岗网站优化常见的渠道推广方式有哪些
  • wordpress 后台乱码成都百度推广优化
  • 大连 响应式网站wordpress保存图片不显示
  • 二手车网站建站网站建设企业建站要求
  • 海山免费网站建设做视频网站如何赚钱
  • 网站增加点击率 怎样做小店面设计装修网
  • 一 美食 视频网站模板下载安装外国优秀网站欣赏
  • 网站服务器部署重庆涪陵网站建设公司
  • php网站开发实践要做网站照片怎么处理