人々がそれを提案する前に: 私はそれを回避する方法を見つけようとする以外の目的でThread.sleepを使用していません。.Sleep()フリーではないかもしれない他の人の将来のコードを処理しようとしています。私は物事を同期させることがどれほど恐ろしいかをよく理解しています。
コードのチャンクでスレッドを受け入れます。このスレッドの存続期間に制限を設定できるようにしたいと思います。私の通常の方法は次のようになります。
Thread outer = new Thread(() =>
{
externalThread.Start();
externalThread.Join();
});
outer.Start();
outer.Join(lifetime);
if (outer.ThreadState != ThreadState.Stopped)
{
outer.Abort();
}
inner.Join();
それ以来、私は睡眠が終わる前に眠っている糸を起こせないようだということを発見しました。さらに悪いことに、10ミリ秒のライフタイムを与えた場合でも、これはコンソールに書き込みます。
new Thread(() => { Thread.Sleep(2000); Console.WriteLine("second"); })
.Abort()はスレッド実行の厳しい制限ではないことに気づきましたが。警告は2秒で十分なようですが、そうではないと思います...
WaitSleepJoinステータスと.Interrupt();をチェックしてみました。スレッドをクラッシュさせるか、例外をスローします(申し訳ありませんが、どちらかわかりません。デバッガーが実行されていない場合はクラッシュし、実行されている場合は割り込みが呼び出されなかったかのように実行されます)、2秒後もコンソールに書き込みます。.Resume()は、スリープ状態のスレッドに対しては何も行わないようです。
スリープが期限切れになるのを待たずにスレッドをウェイクアップする方法はありますか?停止は「即時」ではないことを理解しています。そのため、Console.WriteLineは関係なく呼び出される可能性があります。私を悩ませているのは2秒の待機です。10日間待つとどうなりますか?入ってくるスレッドを制御できないので、知る方法がなく、そのようなことを防ぐ方法がないようです...