Подтвердить что ты не робот

Асинхронный Thread.Sleep()

Я хочу поставить задержку между двумя операциями, не занимая нити

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

Поток должен выйти после workA и выполнить workB (возможно, в новом потоке) после некоторой задержки.

Интересно, может ли это быть некоторым эквивалентом этого псевдокода

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

Моя программа в.NET 2.0

edit 2: System.Timers.Timer.Elapsed событие поднимет событие через 1000 мс. Я не знаю, будет ли поток таймера занят за 1000 мс. (поэтому я не получаю экономию потока)

4b9b3361

Ответ 1

Ты имеешь ввиду:

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, который приносит API-интерфейс Task до.NET 3.5, но a: он не переходит в 2.0 и b: я не думаю, что он включает Task.Delay.