我正在使用 .NET (C#)。

如果我有 2 个线程运行 T1 和 T2 并且 T1 是这样的:

while (true)
{
  dosomething(); //this is a very fast operation
  sleep(5 seconds);
}

与此同时,T2 正在做一些完全不同的事情,但它不时需要给 T1 一个踢腿,这样即使 sleep 时间没有到,它也能从 sleep 中醒来。我该怎么做呢?

最佳答案

使用 WaitHandle,如 ManualResetEvent (或 AutoResetEvent )。

在您的类(class)中,声明一个 ManualResetEvent:

private ManualResetEvent myEvent = new ManualResetEvent(false);

线程 1:
while(true) {
    doSomething();
    myEvent.WaitOne(5000);
    myEvent.Reset();
}

线程2:
myEvent.Set();

Thread1 将等待 5 秒或直到 ManualResetEvent 被设置,以先到者为准。

编辑 :在上面添加了 AutoResetEvent

10-07 13:49