.Netでタスクを実行する時間を制限する方法はいくつかあることを知っていますが、他に見逃したものや、以前に使用した方法の変更/改善があるかどうか疑問に思いました。
方法論がどのように正確に機能するかわからない場合は、質問を含めました。
私が知っている既存の方法は、必ずしも自分で使用しているわけではありません。
- を作成し
Thread
、ポーリングして一定時間終了してから、スレッドを強制終了します。このソリューションは、やや厄介なものに依存しているため、優れていThreadAbortException
ません。コードがどこで終了するかは保証されていません。つまり、管理されていないリソースが使用されたままになる可能性があります。 - パターンを使用し
IAsyncResult
ます。これに伴う問題は、一定の時間待つことができるが、リクエストを中止することを通知する簡単な方法がないため、ブールフラグ(または同様のもの)の設定に依存する必要があることです。 )非同期コード内でチェックされ、停止します。ここでの問題は、非同期コードがコードの特定のセクションでスタックしている場合、実際に終了する前にしばらくの間実行し続ける可能性があることです。 - 私はよく人々
BackgroundWorker
が非同期のものを推奨するのを見てきましたが、ASP.Netでこれを使用できますか(私はそう思います)、一定時間後に非同期プロセスを終了する簡単な方法がありますか? - .Net 4.0でタスクAPIを使用します(現在、すべての作業は.Net 3.5に制限されているため、オプションではありません)。MSDNのドキュメントをざっと読むと、を使用してタスクを簡単にキャンセルできるように見えますが
CancellationToken
、キャンセルはどのくらいの速さで有効になり、finally
ブロックが確実に呼び出されるようになりますか。
すべてのソリューション/提案/方法論を歓迎します