这个ManualResetEvent 就需要手动重置锁的状态了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ManualResetEventDemo
{
class Program
{
//static AutoResetEvent areLock = new AutoResetEvent(true);
//设置release为false
static ManualResetEvent mreLock = new ManualResetEvent(false);
static void Main(string[] args)
{
//比如开启5个task
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() =>
{
Run();
});
}
Thread.Sleep(5000); //5s中之后,火车开走了,这个时候就要撤销栅栏
//ManualResetEvent 手动锁的作用一般就是阻拦一批数据
//这里返回的数据并不是无序的
//set就是设置为true
mreLock.Set();
Console.Read();
}
static int nums = 0;
static void Run()
{
for (int i = 0; i < 10; i++)
{
try
{
//mreLock.Reset();
//ManualResetEvent的WaitOne不会讲IsRealse重置为false
//ManualResetEvent的线程队列可以有多个
mreLock.WaitOne();
Console.WriteLine(nums++);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
}
}
}
}
}