111,094
社区成员




private AutoResetEvent autoEvent = new AutoResetEvent(false);
public void TestTimeLimit()
{
int timeOut = 2;
for(int i=1; i<=5; i++)
{
Console.WriteLine("第{0}次循环, 限时{1}秒!", i, timeOut);
Thread t = new Thread(new ParameterizedThreadStart(
(evt) =>
{
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
Thread.Sleep(new Random().Next(100, 4000));
sw.Stop();
if ( sw.ElapsedMilliseconds / 1000 < timeOut)
{
Console.WriteLine("正在执行操作..本次耗时:{0}毫秒!", sw.ElapsedMilliseconds);
((AutoResetEvent)evt).Set(); //发出通知信号
}
}));
t.Start(autoEvent);
if (this.autoEvent.WaitOne(TimeSpan.FromSeconds(timeOut), false))
Console.WriteLine("本次操作没有超时!\r\n");
else
{
Console.WriteLine("*********操作已超时, 直接进入下一次循环!**********\r\n");
continue;
}
}
}
/*
第1次循环, 限时2秒!
*********操作已超时, 直接进入下一次循环!**********
第2次循环, 限时2秒!
正在执行操作..本次耗时:605毫秒!
本次操作没有超时!
第3次循环, 限时2秒!
正在执行操作..本次耗时:1218毫秒!
本次操作没有超时!
第4次循环, 限时2秒!
*********操作已超时, 直接进入下一次循环!**********
第5次循环, 限时2秒!
*********操作已超时, 直接进入下一次循环!**********
*/
for (var i = 0; i < 10; i++)
{
if(i=4)
{
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
Thread.Sleep(TimeSpan.FromSeconds(10));
}
}
bool bChange = false; //定义全局变量,然后提供接口从外部可以设置bChange的值
for (var i = 0; i < 10; i++)
{
if(bChange)
{
bChange = false;
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
Thread.Sleep(TimeSpan.FromSeconds(10));
}
}