Thread.Join 和 Task.Wait 方法
这两个方法 可以说是类似的功能,都是对当前任务进行等待阻塞,执行完毕后再进行后续处理
talk is cheap, show you code,下面一个是异步执行,一个是加了阻塞,可以对比不同执行结果
1 public static void TaskThreadTest() 2 { 3 Stopwatch watch = new Stopwatch(); 4 watch.Start(); 5 Thread thread = new Thread(new ThreadStart(ThreadFunction)); 6 Console.WriteLine($"Thread 开始"); 7 thread.Start(); 8 //thread.Join(); 9 watch.Stop(); 10 Console.WriteLine($"Thread 耗时:{watch.ElapsedMilliseconds}"); 11 12 Stopwatch watch2 = new Stopwatch(); 13 watch2.Start(); 14 Console.WriteLine($"Run 开始"); 15 var task = Task.Run(() => 16 { 17 for (int i = 0; i < 5; i++) 18 { 19 Thread.Sleep(5); 20 Console.WriteLine($"{i}: Run"); 21 } 22 }); 23 //task.Wait(); 24 watch2.Stop(); 25 Console.WriteLine($"Run 耗时:{watch2.ElapsedMilliseconds}"); 26 Console.WriteLine($"All is End!"); 27 Console.Read(); 28 } 29 30 public static void ThreadFunction() 31 { 32 for (int i = 0; i < 5; i++) 33 { 34 Thread.Sleep(5); 35 Console.WriteLine($"{i}: Thread"); 36 } 37 }
View Code
观察运行结果,可以发现 不管是Thread还是Task,都是采用异步处理的方式在子线程里跑的
接下来我们把 注释的两句话放开(Thread.Join 和 Task.Wait )
再运行,观察结果,可以看到,Thread的线程已经合并到了主线程中,阻塞了主线程,Task异步的任务也变成了阻塞型。
两个方法用起来还是很简单的,这样就很清楚了。
转载于:https://www.cnblogs.com/wolfworker/p/7611585.html
Thread.Join 和 Task.Wait 方法相关推荐
- Thread.Join()方法的理解
关于C#中Thread.Join()的一点理解 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解. Thread.Join()在MSDN中 ...
- java thread join()_Java中Thread.join()的使用方法
概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...
- java并发编程之thread.join()方法详解
thread.join()方法的作用:保证线程的执行结果的可见性.原理是通过阻塞主线程实现的. 代码Demo如下: public class ThreadJoinDemo {public static ...
- 高并发编程-Thread#join方法的使用及使用场景分析
文章目录 含义 方法及示例 void join() void join(long millis) join(long millis, int nanos) 使用场景分析 含义 翻看下源码的注释: Wa ...
- 并发编程——线程——Thread对象的属性和方法
Thread实例对象的方法 # isAlive(): 返回线程是否活动的.# getName(): 返回线程名.# setName(): 设置线程名. threading模块提供的一些方法: # th ...
- Thread系列之Thread.Join()
Thread.Join()方法,顾名思义,在一个线程中加入一些东西. MSDN上解释其作用为:阻塞 "调用线程" 直到某个线程结束. 这个翻译过来的解释有点晦涩.举个例子如下: s ...
- thread.Join(); 让主线程等待自己完成
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- java join 异常_Java:守护进程:thread.join()没有完成,当在一个线程中抛出异常时...
我写了一个Java守护进程(一个实现守护进程和Runnable的类),现在我遇到了以下问题: 在init()中,我创建了一个新线程 . Thread thread = new Thread(this) ...
- Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法, 由于 ...
- python的多线程threading_Python中多线程thread与threading的实现方法,pythonthreading
Python中多线程thread与threading的实现方法,pythonthreading 学过Python的人应该都知道,Python是支持多线程的,并且是native的线程.本文主要是通过th ...
最新文章
- struts2 用form取值时出现的错误
- fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...
- 【Java Web开发指南】解析Spring中Ioc和DI(入门Demo)
- 进一步考察与UI相关的安全漏洞-下
- sklearn综合示例9:分类问题的onehot与预测阈值调整
- 信息系统项目管理01——信息化和信息系统
- 安装Docker环境并下载TensorFlow镜像
- Windows 有哪些值得推荐的必装软件?
- a6账套管理显示无法连接服务器,航天A6基础版简单建账实施流程
- html写一个轮播图响应式布局,响应式banner图片轮播布局代码
- 如何读懂和利用你的微生物多样性测序结果?
- 网页制作 - 问卷网的首页
- 数据分析入门 | kaggle泰坦尼克任务
- 批量将MP3或者m4a转为wav格式
- broker-list与bootstrap-server辨析
- 龙与地下城用户名_多用户地下城如何教我编程
- v-for生成多个div并给div中的组件绑定值
- elf文件反编译C语言,图文并茂,讲透C语言静态链接,ELF文件篇
- 实验五、异常处理与I/O操作
- linux snmptrap的发送与接收。
热门文章
- 二十五、JAVA多线程(五、线程生命周期)
- 四、Linux常用命令——文件搜索命令
- html中label中的for属性
- 编程坑太多,Map 集合怎么也有这么多坑?一不小心又踩了好几个!
- 拉取 google.golang.org/grpc 报错
- [Algorithm] Fibonacci Sequence - Anatomy of recursion and space complexity analysis
- C# 中类的成员有哪些?
- oracle 常用系统表
- QT正则表达式---针对IP地址
- spring异常+自定义以及使用