Thread.Abortは、スリープしているスレッドに割り込むことができますか(たとえば、Thread.Sleep(TimeSpan.FromDays(40)を使用)?または、スリープ期間が終了するまで待機しますか?
(備考:FromDays(40)はもちろん冗談です。そして、Thread.Abortはスレッドを停止するための推奨される方法ではないことを知っています。今のところ、リファクタリングしたくないレガシーコードを使用しています。)
Thread.Abortは、スリープしているスレッドに割り込むことができますか(たとえば、Thread.Sleep(TimeSpan.FromDays(40)を使用)?または、スリープ期間が終了するまで待機しますか?
(備考:FromDays(40)はもちろん冗談です。そして、Thread.Abortはスレッドを停止するための推奨される方法ではないことを知っています。今のところ、リファクタリングしたくないレガシーコードを使用しています。)
コードは千の言葉に値します:
public static void Main(string[] args)
{
var sleepy = new Thread(() => Thread.Sleep(20000));
sleepy.Start();
Thread.Sleep(100);
sleepy.Abort();
sleepy.Join();
}
プログラムは、スリープ時間がなくなる前に終了します。
別のスレッドからのみスレッドを中止できます。つまり、スレッド参照をどこかに保存して.Abort
から、スリープしているスレッド以外のスレッドから呼び出す必要があります。