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相关推荐

  1. 第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions

    一. 整体说明 揭秘: 该章节的性质和上一个章节类似,也是一个扩展的章节,主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions. 通过F12查 ...

  2. ContinueWith() (Task类的延续性任务)实例

    Task<TResult>.ContinueWith Method 命名空间:           System.Threading.Tasks Creates a continuatio ...

  3. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  4. C#多线程之Thread,ThreadPool,Task,Parallel

    总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...

  5. Task.Run vs Task.Factory.StartNew

    Task.Run 和 Task.Factory.StartNew 都可以把一段要执行的代码放到ThreadPool thread中去执行.Task.Factory.StartNew是.Net 4.0中 ...

  6. C++ concurrency::task实现异步编程(Windows)

    最近一直在看js.python.lua等脚本语言的异步编程,今天脑子一热突然想看看C++能否也有支持异步的相关类库,上网一搜还真的有 microsoft官方文档https://msdn.microso ...

  7. Task.Run Vs Task.Factory.StartNew z

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  8. C# Task阻塞方式和延续操作

    Task启动的几种方式 var task = new Task(() =>{Console.WriteLine("工作线程" + Thread.CurrentThread.M ...

  9. 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 应 ...

最新文章

  1. c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd
  2. Openfiler之一:Openfiler的安装(转载)
  3. VMware vSphere开发(1)安装配置VMware vSphere Web Services SDK的运行环境
  4. Swift3.0语言教程删除字符与处理字符编码
  5. windows10 安装docker
  6. python函数不定参数求和
  7. 无服务器架构_如何开始使用无服务器架构
  8. 深度剖析SOC高性能实时事件关联分析引擎
  9. 西门子s7 计算机通讯,PLC与计算机通讯连接
  10. 自动化运维 Shell
  11. Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器 1 2. 读取表格流程 遍历表格ta
  12. oracle删除临时会话表,新一代QQ群机器人
  13. 电脑耳机没声音怎么设置?Windows系统适用
  14. ddos应急处理_DDoS攻击应急体系知多少?
  15. nginx 499 错误的解决
  16. 安卓获取指定目录内所有指定文件类型的文件路径和名字
  17. 创业者的诗,远方和功不唐捐
  18. 已知计算组合的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数。
  19. 基于人工智能的软件测试
  20. Understand Selections in D3

热门文章

  1. 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  2. HTML元素-META全集
  3. SUN:开源在Web2.0时代
  4. 用Canvas创造一个太阳系
  5. Qt之加减乘除四则运算-支持负数
  6. 点到点 Ipsec *** 从一端能正常发起,另一端发起不成功的解决过程
  7. NSByteCountFormatter
  8. 售前工程师的成长---一个老员工的经验之谈(5)
  9. Java核心技术- Java内存分配原理
  10. ceph基本架构及数据分布原理