异步Thread.Sleep()

时间:2013-04-10 11:11:17

标签: .net multithreading

我想在两个操作之间加一个延迟而不保持忙线

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

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

我想知道这个伪代码是否有可能出现这种伪代码

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

编辑 我的程序在.NET 2.0中

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

1 个答案:

答案 0 :(得分:36)

你的意思是:

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

或者,手动创建Timer

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

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

编辑:使用.NET 2.0更新,您必须使用回调设置自己的Timer。有一个nuget包System.Threading.TasksTask API下载到.NET 3.5,但是:它不会转到2.0,而b:我不认为它包含{{1} }。