32

スレッドをビジー状態に保つことなく、2 つの操作の間に遅延を置きたい

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

スレッドは、workA の後に終了し、少し遅れて (おそらく新しいスレッドで) workB を実行する必要があります。

この擬似コードに相当する可能性があるのだろうか

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

edit私のプログラムは.NET 2.0です

edit 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ます。API を .NET 3.5 に下げるナゲット パッケージSystem.Threading.TasksがありTaskますが、a: 2.0 にはなりません。b: 含まれていないと思いますTask.Delay

于 2013-04-10T11:12:26.257 に答える