多线程异步编程示例和实践-Task
上篇博文中,我们介绍了Thread和ThreadPool: 多线程异步编程示例和实践-Thread和ThreadPool 本文中我们继续,说一下TPL(Task Parallel Library,简称TPL)。 在实际的开发中,使用线程池相当复杂,线程的异常捕获、传递以及编排这些问题实现起来都很复杂。 从 .NET Framework 4 开始,TPL 是编写多线程代码和并行代码的首选方法。顾名思义,任务并行库 (TPL) 基于任务的概念。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。 任务的提供有两个主要好处: 1). 系统资源的使用效率更高,可伸缩性更好。 在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程数。 这会使任务相对轻量,可以创建很多任务,启用细化并行 2). TPL提供了一组简单丰富的 API,这些 API 支持等待、取消、继续、可靠的异常处理、详细状态、自定义计划等功能。降低多线程编码和并行编程的复杂度,提升开发效率。 1. 创建和运行任务 多次执行,输出结果: 上面的示例中,创建和运行任务有两种方式:
多次运行,发现两种执行结果,为什么? task1和task2的任务都被放置在线程池的工作者线程中,任务的执行顺序是不确定的。 2. 取消任务 关键的对象:CancellationToken 测试代码: 运行输出: 3. 创建任务集合并输出结果 关键知识点:
Task.Result操作意味着什么?等待Task异步调用完成,从效果上等同于Wait方法 4.处理任务异常 测试代码: 运行输出: 关键知识点:
5. 多任务的串行化 关键知识点:
6. 多任务等待执行完成 多次执行输出: 关键知识点:
8. 创建子任务 关键知识点:
9. 补充一个知识点:前台线程和后台线程 应用程序必须运行完所有的前台线程才可以退出;
准备再写一篇博客,分享几个多线程异步我们踩过的坑和解决方法。 ? 周国庆 2017/6/9 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
- asp.net-mvc-2 – 为什么mvc Html.HiddenFor不渲染我的字段
- asp.net-mvc-5 – WebJob和SignalR Hub之间的通信
- 将ASP.NET身份与核心域模型分离 – 洋葱架构
- ASP.NET动态命令按钮事件未触发
- asp.net-web-api – Web API和.NET 4.5:声明和权利
- 在.NET Core中处理一个接口多个不同实现的依赖注入问题
- asp.net-mvc – 可配置的应用程序洞察检测密钥
- asp.net-core – 为什么这违反了类型参数’TUser’的约束?
- asp.net-core – ASP.NET Core缺少异常中的行号
- asp.net-mvc – 在DropDownList中验证所需的选择
- asp.net – 在formview中使用验证器时,输入参数’
- asp.net文件上载在加载页面时重置了与服务器的连
- 使用asp.net mvc进行基于REST的端点
- asp.net – IIS 6.0和.Net 4的Default.aspx?
- asp.net – HttpPostedFileBase.SaveAs方法问题
- asp.net-mvc – Visual Studio 2010 Full和ASP.N
- asp.net-core – vNext MVC模板 – wwwroot
- 如何在asp.net中使用JSON和JQuery从WebMethod返回
- asp.net-mvc – 实体框架数据库 – 第一个unique