戻るのに時間がかかる Web サービスを呼び出すために使用することを検討してParallel.For
いますが、同時に何度も呼び出すことができ、1 回の呼び出しよりもそれほど長くはかからないことがわかっています。
そのために、私は Parallel.For を試しており、これがどのように機能するかについて自分のアイデアを確認したいと思っています。アプリケーションを台無しにしたくないので、私はおそらく少し慎重すぎると思います。また、このルートに進む場合、アプリケーション チーム全体が、並列コードにアクセスするときに何をする必要があるかを確実に認識できるようにしたいと考えています。
とにかく、これが私の現在の作業と理解です。
public IEnumerable<HotelAvail> GetAvailability (IList<string> codes, DateTime startDate, int numNights)
{
HotelAvail[] result = new HotelAvail[codes.Count];
Parallel.For(0, codes.Count, i =>
{
string code = codes[i];
result[i] = new AvailService().
GetAvailability(
code, startDate, numNights);
});
return result;
}
は、指定された日付範囲 ( + )AvailService
の空室状況を取得します。プロパティの識別子です。startDate
numNights
code
最初に正しいサイズの結果配列を設定し、空のスロットをたくさん用意しました。
次に、並行してサービスを呼び出します。サービスが新しいHotelAvail
オブジェクトを作成し、それを配列の正しい位置に配置します。
すべてが完了したら、配列を返します。この時点で完全に設定されているはずです。空白があってはなりません。このサービスは、システム状態の他の部分には影響しません。Web サービス呼び出しを作成して呼び出し、結果オブジェクトを返すだけです。
私が見ていないこれに関する問題はありますか?
上で述べたように、私は慎重すぎるかもしれませんが、若くて活気に満ちた時代にマルチスレッド コードを書くことに疲れていたので、同じ過ちを繰り返したくありません。
また、このコードは最終的に ASP.NET アプリケーションになります。マルチスレッドコードについて多くの不満があったことをぼんやりと思い出します。そこで発生する可能性のある追加の問題はありますか?