栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#多线程同步之AutoResetEvent

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#多线程同步之AutoResetEvent

C#多线程同步之AutoResetEvent

AutoResetEvent用于线程间的同步,其构造函数,用一个指示是否将初始状态设置为终止的布尔值初始化该类的新实例。

  • false:无信号,子线程的WaitOne方法不会被自动调用
  • true:有信号,子线程的WaitOne方法会被自动调用
public static AutoResetEvent Work1ResetEvent = new AutoResetEvent(false);

public static AutoResetEvent Work2ResetEvent = new AutoResetEvent(false);
代码实例

Work1 运行中需要等待Work2 执行完毕之后再运行接下来的操作!

    public class Work1
    {
        
        public void DoIt()
        {
            while (true)
            {
                Console.WriteLine($"{Thread.CurrentThread.Name} 开始运行....");
                Thread.Sleep(1000);
                Console.WriteLine($"{Thread.CurrentThread.Name} 第一步执行完毕激活work2....");
                Setting.Work2ResetEvent.Set();
                Console.WriteLine($"{Thread.CurrentThread.Name} 继续运行....");
                Thread.Sleep(5000);
                // wait
                Setting.Work1ResetEvent.WaitOne();
                Console.WriteLine($"{Thread.CurrentThread.Name} 运行完成....");
                Setting.Work1ResetEvent.Reset();
                Console.WriteLine("整体流程完毕!!");
                Console.WriteLine("-------------------------------------------");
                Console.WriteLine();
            }
        }
    }
    public class Work2
    {
        public void DoIt()
        {
            while (true)
            {
                // 等待 work1
                Setting.Work2ResetEvent.WaitOne();
                Console.WriteLine($"{Thread.CurrentThread.Name} 开始运行....");
                Thread.Sleep(1000);
                Console.WriteLine($"{Thread.CurrentThread.Name} 运行完成启动Work1....");
                Setting.Work2ResetEvent.Reset();
                // 激活work1
                Setting.Work1ResetEvent.Set();
            }
        }
    }
    public class Setting
    {
        public static AutoResetEvent Work1ResetEvent = new AutoResetEvent(false);
        public static AutoResetEvent Work2ResetEvent = new AutoResetEvent(false);
    }

调用

    class Program
    {
        
        static void Main(string[] args)
        {
            Thread t1 = new Thread(new Work1().DoIt);
            t1.Name = "work1";
            t1.Start();

            Thread t2 = new Thread(new Work2().DoIt);
            t2.Name = "Work2";
            t2.Start();

            Console.ReadKey();
        }
    }

运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号