zoukankan      html  css  js  c++  java
  • 2 Task中的延续和7种阻塞

    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(1000);
                    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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    Console.WriteLine("我是wait2");
                });
                t2.Start();
                //注意的是 这里是factory  上面两个线程也要start
                Task.Factory.ContinueWhenAll(new Task[2] { 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(1000);
                    Console.WriteLine("我是wait1");
                });
                t1.Start();
    
                Task t2 = new Task(() => {
                    Thread.Sleep(200);
                    Console.WriteLine("我是wait2");
                });
                t2.Start();
                //注意的是 这里是factory  上面两个线程也要start
                Task.Factory.ContinueWhenAny(new Task[2] { t1, t2 }, t =>
                {
                    Console.WriteLine("factory 中的when Any");
                });
                Console.WriteLine("我是主线程");
                Console.ReadKey();
    
            }
            
        }
    }

    我是主线程
    我是wait2
    factory 中的when Any
    我是wait1

  • 相关阅读:
    用java程序启动电脑中的软件 分类: java 20091105 01:03 355人阅读 评论(0) 收藏
    关于nextSibling的用法 20091103 01:53 311人阅读 评论(0) 收藏
    HTML中的标签用法 分类: 网页编程【html、js】 20091103 00:53 282人阅读 评论(0) 收藏
    我总结的正则表达式 分类: 正则表达式 20091106 23:01 298人阅读 评论(0) 收藏
    [正则表达式]非常经典的正则表达式 分类: 正则表达式 20091106 03:18 393人阅读 评论(0) 收藏
    读取zip,过滤中文名称 分类: java 20091106 22:46 385人阅读 评论(0) 收藏
    MS SQL与Oracle常用函数对比 分类: 数据库 20091105 23:41 259人阅读 评论(0) 收藏
    读取zip,不过滤中文名,即中文名称也能成功读取 分类: java 20091106 22:48 296人阅读 评论(0) 收藏
    根据字节数截取字符串... 分类: java 20091105 19:21 235人阅读 评论(0) 收藏
    Pattern类 分类: java 20091105 01:00 240人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/wholeworld/p/10193385.html
Copyright © 2011-2022 走看看