Java から C# に移行し、wait() と sleep() について混乱しました。Java では、スリープはオブジェクトへのロックを解除せず、スリープが完了した後、スレッドは作業に戻ります。待機の場合は、オブジェクトからロックを解除し、他のスレッドがそのオブジェクトにしばらくアクセスできるようにします。
これはC#にも当てはまりますか、それとも違いがありますか?
はい、これは C# でも同様です。ほとんどの場合Thread.sleep
、 Java のObject.wait
、Object.notify
、は、.NETの 、、Object.notifyAll
と密接に対応しています。Thread.Sleep
Monitor.Wait
Monitor.Pulse
Monitor.PulseAll
公平性などの細部でいくつかの違いがあると思いますが、基本は同じように機能します。
ただし、これらの低レベルの抽象化を最新のコード (Java または C#) で使用することはめったにありません。Java では高レベルjava.util.concurrent
の抽象化を .NET で使用し、Task
可能であれば (および.NET 4)。特に、を使用Task
すると、C# 5 (および WinRT) での非同期処理の準備が整います。