java
[Test]
public void ResetEventTest()
{
var allDone = new ManualResetEvent(false);
var i = 0;
Console.WriteLine("开始循环。");
ThreadPool.QueueUserWorkItem((x) =>
{
while (i < 5)
{
i++;
Thread.Sleep(1000);
Console.WriteLine("循环【{0}】休眠结束", i);
}
allDone.Set(); //结束循环,可以从WaitOne处开始后续执行了
});
Console.WriteLine("开始等待");
allDone.WaitOne();
Console.WriteLine("收到了Set的通知,可以后续进行了.");
}
上面的就不多解释了,自已动手看看执行结果,比说有用得多。
有时我们要在同步返回的方法中等待异步(或踪事件)的返回结果,那么除了循环等待外,还可以这样实现:
java
public virtual ActionResultWrap Request<T>(string cmdName,T param )
{
allDone.Reset(); //重置,以下方法等待返回中
//var hasReturn = false;
var wrap = new ActionResultWrap();
ReceiveWrap = (x) =>
{
wrap = x;
//hasReturn = true;
allDone.Set();
};
var swrap = new DatagramWrap();
Send(swrap.ToBson(cmdName, param));
allDone.WaitOne();
////这个就是循环等待的方法了
//while (!hasReturn)
//{
// Thread.Sleep(20);
//}
return wrap;
}
转换自: https://www.cnblogs.com/atwind/archive/2013/03/22/2975746.html