CountdownEvent

CountdownEvent是一种同步结构,主要用来协调多种同步处理后的结果场景使用。其含义为:定义一个多信号的结构,然后在应用时判断信号是否全部到达,如果全部到达则继续往下运行,否则进行阻塞,有意思的是,如果阻塞已过,那么再次运行到wait()时,线程是不会再次阻塞的,除非调用reset()重新初始化后才可以。这点和其余的同步结构不一样。

示例如下:

internal class Program
{
    static CountdownEvent e = new CountdownEvent(3);
    static bool isOutput = true;

    static int i = 0;
    static void Main(string[] args)
    {
        Thread t = new Thread(ProcessData);
        t.Start();

        Console.WriteLine("启动");
        i++;

        Console.WriteLine("信号1已到");
        e.Signal();
        Console.WriteLine("信号2已到");
        e.Signal();
        Console.WriteLine("信号3已到");
        e.Signal();

        Console.ReadLine();
        i++;
        Console.WriteLine("信号1又到");
        e.Signal();
        Console.WriteLine("信号2又到");
        e.Signal();
        Console.WriteLine("信号3又到");
        e.Signal();

        Console.ReadKey();

    }
    static void ProcessData()
    {
        while (isOutput)
        {
            Console.WriteLine("阻塞等待信号");
            e.Wait();
            Console.WriteLine("阻塞已过,处理:Processed {0}", i);
            e.Reset();
            if (i > 1)
            {
                isOutput = false;
            }
        }
        if (!isOutput)
        {
            e.Dispose();
            Console.WriteLine("处理完成");
        }
    }

}

运行结果:

 

posted @ 2024-10-20 12:33  Shapley  阅读(8)  评论(0编辑  收藏  举报