Это общая проблема захвата переменной цикла.Лямбда-выражение фиксирует переменную index
, а не ее значение.Это простое исправление:
for (int index = 0; index < ...; index++)
{
int indexCopy = index;
Uri uri = ...;
HttpWebRequest itemHtmlRequest = WebRequest.CreateHttp(uri);
itemHtmlRequest.BeginGetResponse(
result => OnHTMLFetchComplete(result, indexCopy, itemHtmlRequest),null);
}
Здесь вы захватываете indexCopy
вместо index
- но тогда как есть только одна index
переменная, есть новая indexCopy
переменная на каждой итерации цикла.Значение index
меняется со временем, а значение indexCopy
- нет, так что все в порядке.
У Эрика Липперта есть отличная пара постов в блоге на эту тему: part 1; часть 2 .
(Примечание: есть грузы вопросов, на которые есть аналогичный ответ. Однако все фактические вопросы различны.Я лично думаю, что стоит ответить на каждый отдельный вопрос , чтобы, надеюсь, упростить поиск похожих вопросов в будущем.)