0

HttpListener一部のリクエストでは、約10分かかる可能性のある長時間実行されるジョブが必要なWebサービスを作成しました。だから私は次のことを行い、サーバーから戻ります:

var task = Task.Factory.StartNew(() => ImportDocuments(), TaskCreationOptions.LongRunning);
CreateResponse(context.Response, "started");

これは、サーバーから戻って新しいスレッドを起動してタスクを完了することが保証されていますか、それとも使用する必要がありますProcess.Startか? Process.StartWindowsアプリケーションとは別のアプリケーションを実装する必要があるため、使用しませんでした。

4

1 に答える 1

1

Process.Start を使用する必要はまったくありません。

TaskCreationOptions.LongRunningThreadPool とは無関係に、常に新しい Thread でタスクを起動するという保証をまだ見つけていませんが、その意味はそのようなものです。私が見つけることができる最高のものはそれです:

タスクに追加のスレッドが必要になる可能性があるというヒントをスケジューラに提供して、ローカル キュー上の他のスレッドまたは作業項目の進行をブロックしないようにします。

しかし、続けて次のように述べています。

このオプションを使用すると、グローバル キューとローカル キューを含め、ThreadPool を完全に回避できます。

ヒントまたは保証?私はそれが保証されているとかなり確信していますが、それは単なる意見であり、ドキュメントはこれを断固として裏付けていません.

逆コンパイラで少し作業すれば、真実がわかります。

それでも満足できない場合は、次のようにします。

new Thread(() => {
    //my long running code
}).Start();

長時間実行されている作業が ThreadPool を枯渇させないことを絶対に保証します。10 億のスレッドで CPU を殺してしまわないように注意してください。

于 2013-09-08T01:01:35.287 に答える