0

私はC++を使用しているC#を初めて使用しますが、これがタスク並列ライブラリを使用する正しい方法であるかどうかを確認したいと思います。

長時間実行される操作をキューに入れるWebサービスがあります。非同期Web呼び出しを使用したくないので、TPLを使用して、Web操作が呼び出されたときにタスクを作成することを考えています。Web操作が終了した直後に停止するスレッドからタスクをスケジュールすると、何らかのリソースリークがあるのではないかと思います。タスクのステータスや結果を確認する必要がないため、タスクへの参照を保持しないとしましょう。ありがとう。

編集: Sry、最初のショットで自分自身を明確に表現しませんでした。私の質問は、クライアントではなく、Webサービスに関連しています。クライアントは、時間がかかるWebサービス操作を呼び出します。Webサービス呼び出しは、操作がバックグラウンドで正常にキューに入れられ/実行されたことを示して戻ります。Webサービス操作では、StartNewによって返されたタスクオブジェクトを保存せずにTPLを使用したいと思います。タスクオブジェクトのステータスを読み取らないためにリークした場合、タスクオブジェクトが永久に保持されるかどうか疑問に思います。たぶん、邪魔をしているのは私のC ++の考え方だけであり、マネージコードであるため、リークについては気にする必要はありません。

4

1 に答える 1

0

タスクを忘れても、TPL に問題は発生しません。詳細については、stackoverflow.com/questions/3734280/… を参照してください。しかし、そのタスクで実行したい作業は重要です。「忘れてしまった」場合、それが完了したこと、正しく行われたこと、および再起動する必要がないことをどのように確認できますか? それはすべてアプリケーション固有です。

スレッド プールの「完全にビジー」とは、1023 個のスレッド プール スレッドが作成され、実行中であることを意味します (これはおそらく非常に悪いことです)。それ以外の場合、スレッド プールは最小として CPU/コアあたり 1 つのスレッドで開始し、実行されていないスレッドの数がない限り、毎秒新しいスレッドを開始することによってその最小値を維持します。したがって、実際には何も「キューに入れません」。たとえば、12 個のタスクを開始し、ある時点で 4 個を「キューに入れ」、別の時点で 12 個すべてを実行することができます...

于 2012-09-19T16:51:52.633 に答える