2 Task中的延续和7种阻塞
2024-10-02 00:57:24
1.wait
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
//阻塞 wait 有点像thread的join 作用是Task执行完 这个wait之后的代码才可以执行
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait");
});
t1.Start();
t1.Wait();
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
2.WaitAll
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WaitAll(t1, t2);
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
先输出 我是wait2 再输出 我是wait1 最后输出 我是主线程
3.WaitAny
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WaitAny(t1, t2);
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
先输出 我是wait2 再输出 我是主线程 最后输出 我是wait1
4 whenAll +延续
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WhenAll(t2, t1).ContinueWith(t3=> {
Console.WriteLine("我是t3,一个新的线程");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
我是主线程
我是wait2
我是wait1
我是t3,一个新的线程
5 whenAny +延续
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//跟上一个代码的区别是 上一个是whenAll 这个是whenAny
Task.WhenAny(t2, t1).ContinueWith(t3=> {
Console.WriteLine("我是t3,一个新的线程");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
我是主线程
我是wait2
我是t3,一个新的线程
我是wait1
6 Task.Factory的whenAll阻塞和延续
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//注意的是 这里是factory 上面两个线程也要start
Task.Factory.ContinueWhenAll(new Task[] { t1, t2 }, t =>
{
Console.WriteLine("factory 中的when All");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
我是主线程
我是wait2
我是wait1
factory 中的when All
7 Task.Factory的whenAny阻塞和延续
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//注意的是 这里是factory 上面两个线程也要start
Task.Factory.ContinueWhenAny(new Task[] { t1, t2 }, t =>
{
Console.WriteLine("factory 中的when Any");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}
我是主线程
我是wait2
factory 中的when Any
我是wait1
最新文章
- 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优
- QT网络编程
- Mac、Linux更换命令行svn diff为P4Merge、vimdiff
- Django中载入javascript、css的操作
- C++静态代码分析工具对比cppCheck与PreFast
- OpenMesh 之向量操作
- JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat
- gomobile 真机 log 打出的日志跟踪
- python自定义线程池
- 纯JavaScript实现一些小功能
- lightoj 1005
- 访问快递100的rest的请求
- DAO以及获取自动生成主键值
- [CSS3] 学习笔记-CSS3常用操作
- 大数据学习总结(4)参考splunk架构
- 获取X天后的日期
- ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新
- Nginx部署静态页
- 第一次接触Android Studio
- Oracle调优总结
热门文章
- FTP、SSH、NFS等环境工具的安装
- [Debug] Use Snippets to Store Behaviors in Chrome DevTools
- js进阶 12-5 jquery中表单事件如何使用
- Gora官方文档之二:Gora对Map-Reduce的支持 分类: C_OHTERS 2015-01-31 11:27 232人阅读 评论(0) 收藏
- web.xml(8)_jsp-config
- jquery zoom jquery放大镜特效
- Javascript 获取页面高度(多种浏览器)
- com.octo.captcha.service.CaptchaServiceException: Invalid ID, could not validate unexisting o
- php实现求二进制中1的个数(右移、&;、int32位)(n = n &; (n - 1);)
- PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式)