これは現在の機能です:
- 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
- 私の Web サービスは、データベースにレコードを作成します。
- 私の Web サービスは、新しいレコード ID を Web サイトにすぐに返します。
- 私の Web サイトは、そのレコード ID をユーザーに表示します。
これはうまくいきました。ステップ 2 の後で、Web サービスが (条件に応じて) 1 ~ 6 個の外部 Web サービスを呼び出すように、機能を追加する必要があります。したがって、次のようになります。
- 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
- 私の Web サービスは、データベースにレコードを作成します。
- 私の Web サービスは、外部の Web サービスを呼び出します。結果をマージしてデータベースに保存します。
- 私の Web サービスは、新しいレコード ID を Web サイトに返します。
- 私の Web サイトは、そのレコード ID をユーザーに表示します。
この新機能により、Web サイトのリクエストに 10 分かかる場合があります。これが私が新しい機能を実装したい方法です。
- 私の Web サイトは、ASP.NET Web サービスを同期的に呼び出します。
- 私の Web サービスは、データベースにレコードを作成します。
- 私の Web サービスは新しいスレッドを作成し、そのスレッドでメソッドを呼び出します (起動して忘れます)。このメソッドは、外部 Web サービスを呼び出し、結果をマージしてデータベースに保存します。これは別のスレッド上にあるため、実行はステップ 3 を完了する直前にステップ 4 に進みます。
- 私の Web サービスは、新しいレコード ID を Web サイトにすぐに返します。
- 私の Web サイトは、そのレコード ID をユーザーに表示します。
また、ステップ 3 で作成したスレッドにタイムアウトを設定して、タスクが 10 分以内に終了し、そうでない場合はスレッドを中止する必要があるようにします。
バックグラウンドスレッドであるため、呼び出されない ThreadPool.QueueUserWorkItem を試しました。最初は Thread / Task.TaskFactory は実行可能に見えますが、リクエストごとに新しいスレッドを作成することはベスト プラクティスではないようです。
誰かがステップ3のVB.NETコード/リファレンスを提供できますか? 具体的には、別のスレッドで外部Webサービスを呼び出して、そのスレッドのタイムアウトを設定して忘れますか?
ありがとう