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

vb.net做网站教程/舆情优化公司

vb.net做网站教程,舆情优化公司,宝山网站建设,购买域名后如何使用转自原文 C# Task 用法 C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用Task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。 顺便提一下,配合CancellationTokenS…

转自原文 C# Task 用法

C# Task 的用法

其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用Task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。

顺便提一下,配合CancellationTokenSource类更为可以轻松的对Task操作的代码进行中途终止运行,会在后面的章节中讲述。

如果我们使用线程池来实现某几个方法运行,然后等待运行完成的大概会编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using (ManualResetEvent m1 = new ManualResetEvent(false))
using (ManualResetEvent m2 = new ManualResetEvent(false))
{
    ThreadPool.QueueUserWorkItem(delegate
    {
        MyMethodA();
        m1.Set();
    });
    ThreadPool.QueueUserWorkItem(delegate
    {
        MyMethodB();
        m2.Set();
    });
    WaitHandle.WaitAll(new WaitHandle[] { m1, m2, });
}

 

如果用Task类的话,相对就比较简单了,至少代码看起来很舒服。也就意味着维护也比较方便

    Task t1 = Task.Factory.StartNew(delegate { MyMethodA(); });Task t2 = Task.Factory.StartNew(delegate { MyMethodB(); });t1.Wait();t2.Wait();

 

上面的方法是一个一个的执行完毕,获取不是我们想要的,我们一般是想要他们一起同时执行,提高程序处理事情的效率。

    Task t1 = Task.Factory.StartNew(delegate { MyMethodA(); });Task t2 = Task.Factory.StartNew(delegate { MyMethodB(); });Task.WaitAll(t1, t2);

 

下面我们来简单介绍下Task的用法

 

创建 Task

创建Task有两种方式,一种是使用构造函数创建,另一种是使用 Task.Factory.StartNew 进行创建。如下代码所示

1.使用构造函数创建Task

  1.  Task t1 = new Task(MyMethod);

2.使用Task.Factory.StartNew 进行创建Task

  1.  Task t1 = Task.Factory.StartNew(MyMethod);

其实这两种方式都是一样的,Task.Factory 是对Task进行管理,调度管理这一类的。好学的伙伴们,可以深入研究。这不是本文的范畴,也许会在后面的文章细说。

运行 Task

运行Task的两种方式,在上面我们已经提到过了,一种等待运行完毕,另一种则等待所有运行完毕。不过这里还有一种就是异步运行跟使用多线程一样,调用Task对象中的Start()方法即可。看看下面这个控制台示例。纯粹是Wait和AllWait的话,仅仅是等待。而不是执行。所以我们还需要调用Start()方法

复制代码
    static void Main(string[] args){Task t1 = new Task(MyMethod);t1.Start();Console.WriteLine("主线程代码运行结束");Console.ReadLine();}static void MyMethod(){for (int i = 0; i < 5; i++){Console.WriteLine(DateTime.Now.ToString());Thread.Sleep(1000);}}
复制代码

运行效果如图

Task因为我们没有调用Wait 所以是异步执行的~

取消Task

我们一开始就描述了 CancellationTokenSource 这个对象对Task的取消运行。一般是用不到这个方法的,一般会正常的退出所运行的代码,如使用 bool IsExit 之类的来进行一个控制。而不是中途强制中断代码。

可以参考我的这篇文章:http://www.wxzzz.com/643.html

至于 CancellationTokenSource 控制Task,下一篇文章会进行详细的一个介绍。

 

Task的异常处理

因为Task中是异步执行,你也可以理解为跟多线程一样,具体错误捕获需要自己去捕获。很有意思的是Task的异常还会重新抛到Wait和AllWait中,我们可以进行方便的捕获这些异常。如下代码

复制代码
    static void Main(string[] args){Task t1 = new Task(MyMethod);t1.Start();t1.Wait();Console.WriteLine("主线程代码运行结束");Console.ReadLine();}static void MyMethod(){throw new Exception("Task异常测试");}
复制代码

运行效果如图

Task Exception

获取 Task 的返回值

先看看代码

    Task<string> t1 = Task.Factory.StartNew(() => "测试");t1.Wait();Console.WriteLine(t1.Result);Console.ReadLine();

返回值可以是任意的类型,因为是个泛型嘛~ 还是依然的非常简洁的代码。

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。













本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7221597.html,如需转载请自行联系原作者



http://www.jmfq.cn/news/5093425.html

相关文章:

  • 企业网络平台建设/江门关键词排名优化
  • 曲阜网站制作/谷歌chrome浏览器官方下载
  • 网站开发html工具/百度热门
  • 微信商城网站方案/郑州网站制作公司
  • 网站没有备案号/网络广告的形式
  • 专业科技网站建设/适合seo优化的网站
  • c2c网站建设策划书/体验营销
  • 如何做摄影网站/怎么免费搭建自己的网站
  • 人像摄影作品网站/企业信息查询
  • 咨询公司logo/广州seo效果
  • 石排镇仿做网站/爱廷玖达泊西汀
  • 做支付网站/网络营销方案3000字
  • 纪念馆网站建设方案/外贸建站服务推广公司
  • 深圳网站建设找哪/百度搜索入口网址
  • 烟台网站制作培训/百度收录提交网址
  • 个人小程序怎么申请注册/seo免费优化网站
  • 上海门户网站的亮点/app软件开发
  • 网站建设网/搜索引擎优化是什么意思啊
  • 南昌大型网站制作/西安seo外包公司
  • 高端网站建设信息/找百度
  • 面包屑网站导航怎么做/企业培训内容包括哪些内容
  • 做网站和app那个花销大/外贸快车
  • 深圳有没有什么网站/山西seo
  • 建设公司网站的原则/百度关键词搜索排名查询
  • 做县城门户网站/搜索引擎优化技术有哪些
  • 如何做音乐分享类网站/简单的网站建设
  • 鞍山做网站/百度经验首页
  • 微信网站测试/网站统计哪个好用
  • 安亭做网站公司/seo主管招聘
  • 网站空间与域名的关系/发外链软件