32

我想在两个操作之间延迟而不让线程忙

 workA();
 Thread.Sleep(1000);
 workB();

线程必须在 workA 之后退出并在延迟一段时间后执行 workB(可能在新线程中)。

我想知道是否有可能与此伪代码等效

workA();
Thread.BeginSleep(1000, workB); // callback

编辑我的程序在 .NET 2.0 中

编辑 2:System.Timers.Timer.Elapsed 事件将在 1000 毫秒后引发事件。我不知道计时器线程是否会忙 1000 毫秒。(所以我没有获得线程经济)

4

1 回答 1

55

你的意思是:

Task.Delay(1000).ContinueWith(t => workB());

Timer或者,手动创建一个。

async请注意,这在代码中看起来更漂亮:

async Task Foo() {
    workA();
    await Task.Delay(1000);
    workB();
}

编辑:随着您的 .NET 2.0 更新,您必须设置自己Timer的回调。有一个 nuget 包System.Threading.Tasks可以将TaskAPI 降低到 .NET 3.5,但是 a:它不会转到 2.0,并且 b:我认为它不包含Task.Delay.

于 2013-04-10T11:12:26.257 回答