サービス ロジックの WCF レイヤーと対話する ASP.NET MVC 3 アプリケーションがあります。ある特定の機能では、サービス層が応答するのに時間がかかり、UI は svc でタイムアウトします。処理自体が膨大なので、どうしても時間がかかります。ユーザーに timeout を見せたくないので、部分的な成功ステータスを表示し、UI をステータスで更新し続けることを計画しました。
プロセスをさまざまなステップに分割する予定です。そのうちのいくつかは、ファイヤー アンド フォーゲット ファッションのようなものです。ユーザーが詳細を要求したとき
Svc は必須の手順を処理し、応答を返します
Svc はまた、以下 (TPL) を使用してタスクを起動します。これにより、必須ではない手順が実行されます。
Task.Factory.StartNew(FireAway);
UI はステータスを更新するためにポーリングを続けます
タスクは DB の完了ステータスを更新します
UI は完了ステータスをポーリングして取得し、UI に表示します
懸念...
- タスクを処理するスレッドは再利用されますか (リスナーがアタッチされていません)、これによりスレッドの作成やリークが多すぎますか?
- リソースについてはどうですか? ファイア アンド フォーゲット タスクはメモリ リークを引き起こしますか? タスク機能は、複数の DB に接続してステータスを更新することです。
- 私はデザインに満足していません (私たちはこれを迅速な修正として行う必要があります)、より良いデザインパターンはありますか?