私はさまざまなウェブサイトで、Thread.Abortがあまり使用しないことをよく読んでいます。この場合、どのようにタイムアウトパターンを実装しますか?例えば、私は、MSが以下のパターン(拡張メソッドでラップしたもの)をフレームワーク全体で使用していることを読んだことがあります。個人的には、これはかなり素晴らしい拡張機能だと思いますが、私はThread.Abortについて心配しています。誰か良い方法がありますか?タイムアウトパターン - Thread.Abortはどれくらい悪いですか?
public static bool CallandWait(this Action action, int timeout)
{
Thread subThread = null;
Action wrappedAction =() =>
{
subThread = Thread.CurrentThread;
action();
};
IAsyncResult result = wrappedAction.BeginInvoke(null, null);
if (((timeout != -1) && !result.IsCompleted) && (!result.AsyncWaitHandle.WaitOne(timeout, false) || !result.IsCompleted))
{
if (subThread != null)
{
subThread.Abort();
}
return false;
}
else
{
wrappedAction.EndInvoke(result);
return true;
}
}