Я смотрю на использование Parallel.For
для вызова веб-службы, для возврата которой требуется некоторое время, однако мы знаем, что можем вызывать его много раз одновременно, и это не займет намного больше времени, чем один звонок.
С этой целью я пробую 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
, и я помещаю его в массив в правильной позиции.
Когда все будет сделано, я возвращаю массив.К этому моменту он должен быть полностью заселен.Там не должно быть никаких пробелов.Служба не влияет ни на какую другую часть состояния системы - она просто создает вызов веб-службы, вызывает его и возвращает объект результата.
Есть ли какие-либо проблемы с этим, которых я не вижу.
Как я уже говорил выше, я, вероятно, был слишком осторожен, но я был горен написанием многопоточного кода в более юные и бурные дни, и я не хочу повторять те же ошибки снова.1025 * Кроме того, этот код в конечном итоге окажется в приложении ASP.NET.Я смутно припоминаю, что он много жалуется на многопоточный код.Какие-нибудь дополнительные проблемы, с которыми я мог бы столкнуться там?