2、Task 使用 ContinueWith 而不要使用 Wait
1、线程自旋:在阻塞线程的时候为了等待解锁(访问临界资源)(Sleep)。
2、上下文切换:将处理器当前线程的状态保存到操作系统内部的线程对象中,然后再挑出一个就绪的线程,把上下文信息传递给处理器,然后执行这个线程。
要尽量避免上述两种情况。
using System.Threading.Tasks;namespace ShouldCode {public sealed class ShouldContinueNotWait{public Task ShouldContinue(){var task = Task.Run(() =>{System.Console.WriteLine("任务1完成!");});//尽量使用 ContinueWith 处理后续任务task.ContinueWith(t => System.Console.WriteLine("任务1后续任务1完成!")).ContinueWith(t => System.Console.WriteLine("任务1后续任务1的后续任务完成!")); //耗时短的后续任务应该使用同一个线程避免可能发生的上下文切换task.ContinueWith(t => System.Console.WriteLine("任务1后续任务2完成!"), TaskContinuationOptions.ExecuteSynchronously);return task;}public Task NotWait(){var task = Task.Run(() =>{System.Console.WriteLine("任务1完成!");});task.Wait();System.Console.WriteLine("任务1后续任务完成!");return task;}public async Task ShouldAwait(){var task = Task.Run(() =>{System.Console.WriteLine("任务1完成!");});await task;//此语法糖基于 continuewith 实现,和 ShouldContinue 相同System.Console.WriteLine("任务1后续任务完成!");}public async Task NotWaitAsync(){var task = Task.Run(() =>{System.Console.WriteLine("任务1完成!");});//异步方法中不要同步等待//task.Wait();尽量不要使用。 task.Wait();await Task.Run(() =>{System.Console.WriteLine("任务2完成!");});}} }
转载于:https://www.cnblogs.com/zhuwansu/p/11082075.html
2、Task 使用 ContinueWith 而不要使用 Wait相关推荐
- 第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
一. 整体说明 揭秘: 该章节的性质和上一个章节类似,也是一个扩展的章节,主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions. 通过F12查 ...
- ContinueWith() (Task类的延续性任务)实例
Task<TResult>.ContinueWith Method 命名空间: System.Threading.Tasks Creates a continuatio ...
- 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...
- C#多线程之Thread,ThreadPool,Task,Parallel
总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...
- Task.Run vs Task.Factory.StartNew
Task.Run 和 Task.Factory.StartNew 都可以把一段要执行的代码放到ThreadPool thread中去执行.Task.Factory.StartNew是.Net 4.0中 ...
- C++ concurrency::task实现异步编程(Windows)
最近一直在看js.python.lua等脚本语言的异步编程,今天脑子一热突然想看看C++能否也有支持异步的相关类库,上网一搜还真的有 microsoft官方文档https://msdn.microso ...
- Task.Run Vs Task.Factory.StartNew z
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- C# Task阻塞方式和延续操作
Task启动的几种方式 var task = new Task(() =>{Console.WriteLine("工作线程" + Thread.CurrentThread.M ...
- Android SDK 2.1 - Dev Guide - Best Practives - UI Guidelines - Activity and Task Design - 中文/Chinese
转自:http://blog.csdn.net/sirdonker/article/details/5647625 Activity 和 task 的设计摘要 Activity 是 Android 应 ...
最新文章
- c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd
- Openfiler之一:Openfiler的安装(转载)
- VMware vSphere开发(1)安装配置VMware vSphere Web Services SDK的运行环境
- Swift3.0语言教程删除字符与处理字符编码
- windows10 安装docker
- python函数不定参数求和
- 无服务器架构_如何开始使用无服务器架构
- 深度剖析SOC高性能实时事件关联分析引擎
- 西门子s7 计算机通讯,PLC与计算机通讯连接
- 自动化运维 Shell
- Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器	1 2. 读取表格流程 遍历表格ta
- oracle删除临时会话表,新一代QQ群机器人
- 电脑耳机没声音怎么设置?Windows系统适用
- ddos应急处理_DDoS攻击应急体系知多少?
- nginx 499 错误的解决
- 安卓获取指定目录内所有指定文件类型的文件路径和名字
- 创业者的诗,远方和功不唐捐
- 已知计算组合的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数。
- 基于人工智能的软件测试
- Understand Selections in D3
热门文章
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- HTML元素-META全集
- SUN:开源在Web2.0时代
- 用Canvas创造一个太阳系
- Qt之加减乘除四则运算-支持负数
- 点到点 Ipsec *** 从一端能正常发起,另一端发起不成功的解决过程
- NSByteCountFormatter
- 售前工程师的成长---一个老员工的经验之谈(5)
- Java核心技术- Java内存分配原理
- ceph基本架构及数据分布原理