欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年C#-Task用法演示教学 .pdf

    • 资源ID:27261343       资源大小:51.69KB        全文页数:8页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年C#-Task用法演示教学 .pdf

    C#- Task 用 法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 一:Task 的优势ThreadPool 相比 Thread 来说具备了很多优势,但是ThreadPool 却又存在一些使用上的不方便。比如:1: ThreadPool不支持线程的取消、完成、失败通知等交互性操作;2: ThreadPool不支持线程执行的先后次序;以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task。Task 在线程池的基础上进行了优化,并提供了更多的 API。在 FCL4.0 中,如果我们要编写多线程程序,Task 显然已经优于传统的方式。以下是一个简单的任务示例:staticvoid Main( string args) Task t = new Task() = Console.WriteLine( 任务开始工作 ); / 模拟工作过程 Thread.Sleep(5000); ); t.Start(); t.ContinueWith(task) = Console.WriteLine( 任务完成,完成时候的状态为: ); Console.WriteLine(IsCanceled=0tIsCompleted=1tIsFaulted=2, task.IsCanceled, task.IsCompleted, task.IsFaulted); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - ); Console.ReadKey(); 二:Task 的完成状态任务 Task 有这样一些属性,让我们查询任务完成时的状态:1: IsCanceled,因为被取消而完成;2: IsCompleted,成功完成;3: IsFaulted,因为发生异常而完成需要注意的是,任务并没有提供回调事件来通知完成(像BackgroundWorker 一样),它通过启用一个新任务的方式来完成类似的功能。 ContinueWith方法可以在一个任务完成的时候发起一个新任务,这种方式天然就支持了任务的完成通知:我们可以在新任务中获取原任务的结果值。下面是一个稍微复杂一点的例子,同时支持完成通知、取消、获取任务返回值等功能:staticvoid Main( string args) CancellationTokenSource cts = newCancellationTokenSource(); Task t = new Task() = Add(cts.Token), cts.Token); t.Start(); t.ContinueWith(TaskEnded); / 等待按下任意一个键取消任务 Console.ReadKey(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - cts.Cancel(); Console.ReadKey(); staticvoid TaskEnded(Task task) Console.WriteLine( 任务完成,完成时候的状态为: ); Console.WriteLine(IsCanceled=0tIsCompleted=1tIsFaulted=2, task.IsCanceled, task.IsCompleted, task.IsFaulted); Console.WriteLine( 任务的返回值为: 0 , task.Result); staticint Add(CancellationToken ct) Console.WriteLine( 任务开始 ); int result = 0; while (!ct.IsCancellationRequested) result+; Thread.Sleep(1000); return result; 在任务开始后大概3 秒钟的时候按下键盘,会得到如下的输出:任务开始 任务完成,完成时候的状态为:IsCanceled=False IsCompleted=True IsFaulted=False 任务的返回值为: 3你也许会奇怪,我们的任务是通过Cancel 的方式处理,为什么完成的状态IsCanceled 那一栏还是 False 。这是因为在工作任务中,我们对于IsCancellationRequested进行了业务逻辑上的处理,并没有通过名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - ThrowIfCancellationRequested方法 进行处理。如果采用后者的方式,如下:staticvoid Main( string args) CancellationTokenSource cts = newCancellationTokenSource(); Task t = new Task() = AddCancleByThrow(cts.Token), cts.Token); t.Start(); t.ContinueWith(TaskEndedByCatch); / 等待按下任意一个键取消任务 Console.ReadKey(); cts.Cancel(); Console.ReadKey(); staticvoid TaskEndedByCatch(Task task) Console.WriteLine( 任务完成,完成时候的状态为: ); Console.WriteLine(IsCanceled=0tIsCompleted=1tIsFaulted=2, task.IsCanceled, task.IsCompleted, task.IsFaulted); try Console.WriteLine(任务的返回值为: 0 , task.Result); catch (AggregateException e) e.Handle(err) = err is OperationCanceledException); staticint AddCancleByThrow(CancellationToken ct) Console.WriteLine( 任务开始 ); int result = 0; while ( true ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - ct.ThrowIfCancellationRequested(); result+; Thread.Sleep(1000); return result; 那么输出为:任务开始 任务完成,完成时候的状态为:IsCanceled=True IsCompleted=True IsFaulted=False 在任务结束求值的方法TaskEndedByCatch中,如果任务是通过ThrowIfCancellationRequested方法结束的,对任务求结果值将会抛出异常OperationCanceledException,而不是得到抛出异常前的结果值。这意味着任务是通过异常的方式被取消掉的,所以可以注意到上面代码的输出中,状态IsCancled 为 True。再一次,我们注意到取消是通过异常的方式实现的,而表示任务中发生了异常的 IsFaulted状态却还是等于 False 。这是因为ThrowIfCancellationRequested是协作式取消方式类型CancellationTokenSource的一个方法, CLR进行 了特殊的处理。 CLR知道这一行程序开发者有意为之的代码,所以不把它看作是一个异常(它被理解为取消)。要得到 IsFaulted等于 True 的状态,我们可以修改 While 循环,模拟一个异常出来:while ( true ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - /ct.ThrowIfCancellationRequested(); if (result = 5) throw new Exception(error); result+; Thread.Sleep(1000); 模拟异常后的输出为:任务开始 任务完成,完成时候的状态为:IsCanceled=False IsCompleted=True IsFaulted=True 三:任务工厂Task 还支持任务工厂的概念。任务工厂支持多个任务之间共享相同的状态,如取消类型 CancellationTokenSource就是可以被共享的。通过使用任务工厂,可以同时取消一组任务:staticvoid Main( string args) CancellationTokenSource cts = newCancellationTokenSource(); / 等待按下任意一个键取消任务 TaskFactory taskFactory = new TaskFactory(); Task tasks = new Task taskFactory.StartNew() = Add(cts.Token), taskFactory.StartNew() = Add(cts.Token), taskFactory.StartNew() = Add(cts.Token) ; /CancellationToken.None指示 TasksEnded不能被取消名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - taskFactory.ContinueWhenAll(tasks, TasksEnded, CancellationToken.None); Console.ReadKey(); cts.Cancel(); Console.ReadKey(); staticvoid TasksEnded(Task tasks) Console.WriteLine( 所有任务已完成! ); 以上代码输出为:任务开始 任务开始 任务开始 所有任务已完成(取消)!本建议演示了 Task(任务)和 TaskFactory (任务工厂)的使用方法。Task 甚至进一步优化了后台线程池的调度,加快了线程的处理速度。在FCL4.0 时代,使用多线程,我们理应更多地使用Task。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -

    注意事项

    本文(2022年C#-Task用法演示教学 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开