3

スレッドが特定の時間に達するか、キャンセルするように指示されるまでスリープ状態にするために呼び出すことができる、再利用可能なコードを作成したいと思います。Cancel変数は、スレッドを持つオブジェクトの揮発性ブール値になります。

私のアプローチはこれでした:

public class ThreadUtil
{
    public static void SleepTillOrDone(DateTime till, ref bool done)
    {
        while ((!done) && (DateTime.Now < till))
        {
            var diff = till - DateTime.Now;
            Thread.Sleep(diff.TotalMilliseconds >= 100 ? 100 : 10);
        }
    }
}

ただし、これにより、「揮発性フィールドへの参照は揮発性として扱われません」という警告が表示されます。少し読んだ後、警告の意味を理解しましたが、volatileキーワードなしで安全に使用できるようなメソッドをどのように書くのでしょうか?それとも、別の完全に優れたアプローチがありますか?

4

1 に答える 1

2

既存のプリミティブを再発明しようとしているように思えます。この場合、WaitHandles. あなたのメソッドは、タイムアウトを意図したManualResetEvent.WaitOneによく似ています。

于 2012-11-07T12:22:06.787 に答える