4

現在開発中の WCF サービスに、結果をユーザーに返した後に何らかの作業を行いたいメソッドがあります。

サービスのユーザーは、データベースに保存された「アイテム」を送信してから、他のサービスやその他の処理に多くの時間 (数分) かかる可能性があるものを呼び出して処理します。問題は、ユーザーがアイテムのデータベース ID だけを知っていればよいということです。

そのため、すべての作業が完了するまでユーザーを待たせたくありません。System.Threading.Tasks.Task を開始して、次のように戻る直前に、このような重労働を実行することは合理的な解決策でしょうか。

int id = InsertIntoDB(item);
Task.Factory.StartNew(() => HeavyProcessing());
return id;
4

2 に答える 2

2

もちろん、このオプションは問題ありません。何か問題がありますか?

別のオプションは、クライアント側で非同期に呼び出しを行うことです。サーバーの実装も同期できますが、シナリオによって異なります。このオプションは実装が簡単です(非同期ではありません)が、サーバーがヒットする可能性があります。一部の使用クォータ(最大同時クライアントなど)。

于 2012-09-20T14:10:47.530 に答える
2

このタスクが成功裏に完了することは、どの程度重要ですか? IIS がホストする WCF サービスは、IIS によって積極的に強制終了される可能性があり、その場合、バックグラウンド スレッドの実行が途中で停止する可能性があります。これが問題になる場合は、操作をメッセージ キューに入れ、Windows サービスが利用可能になったときにそれを取得できるようにすることをお勧めします。その場合、Windows サービスははるかに信頼性が高くなります。

于 2012-09-20T14:30:32.567 に答える