Код не является полным (он не создается), так как я не могу получить «элемент» в следующей строке в WriteResponseData ().
HttpWebResponse WebResp = (HttpWebResponse)item.EndGetResponse(result);
Я должен что-то упустить,Пожалуйста, укажите.
ниже приведен полный код: -
static string[] imageUris =
{ "http://www.cricinfo.com/db/PICTURES/CMS/118200/118217.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/117500/117599.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/117500/117598.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106400/106412.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106400/106411.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106200/106275.2.jpg",
"http://www.cricinfo.com/db/PICTURES/CMS/106300/106362.2.jpg"
};
static void Main(string[] args)
{
SendAsynchronousRequests();
Console.WriteLine("All the files have been requested and retrieved...");
Console.ReadLine();
}
static void SendAsynchronousRequests()
{
WebRequest[] requests = InitializeWebRequests();
foreach (var item in requests)
{
Console.WriteLine("Trying to retrieve :-" + item.RequestUri.OriginalString);
item.BeginGetResponse
(
WriteResponseData,
);
}
}
static WebRequest[] InitializeWebRequests()
{
WebRequest[] requests = new WebRequest[imageUris.Length];
int temp = 0;
foreach (var item in imageUris)
{
requests[temp] = WebRequest.Create(item);
//requests[temp].Method = "GET";
temp++;
}
return requests;
}
static void WriteResponseData(IAsyncResult result)
{
HttpWebResponse WebResp = (HttpWebResponse)item.EndGetResponse(result);
Console.WriteLine("WebResp.StatusCode :-" + WebResp.StatusCode);
Console.WriteLine("WebResp.Server :- " + WebResp.Server);
Console.WriteLine("WebResp.ContentLength :- " + WebResp.ContentLength.ToString());
Console.WriteLine(Environment.NewLine);
}
РЕДАКТИРОВАТЬ
Итак, модифицированный код для метода (который будетcompile) будет выглядеть следующим образом: -
WebRequest request = (WebRequest)result.AsyncState;
if (result != null && result.IsCompleted)
{
HttpWebResponse WebResp = (HttpWebResponse)request.EndGetResponse(result);
Console.WriteLine("WebResp.StatusCode :-" + WebResp.StatusCode);
Console.WriteLine("WebResp.Server :- " + WebResp.Server);
Console.WriteLine("WebResp.ContentLength :- " + WebResp.ContentLength.ToString());
Console.WriteLine(Environment.NewLine);
}
Это дает мне следующую ошибку времени выполнения: -
Ссылка на объект не установлена на экземпляр объекта.в WebRequestUsingAPM.Program.WriteResponseData (результат IAsyncResult) в \ WebRequestUsingAPM \ Program.cs: строка 73 в System.Net.LazyAsyncResult.Complete (IntPtr userToken) в System.Net.ContextAwareResult.CompleteExject.Net.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое ignoreSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext, состояние объекта) в System.Net.ContextAwareResult.Complete (IntPt.) System.Net.LazyAsyncResult.ProtectedInvokeCallback (результат объекта, IntPtr userToken) в System.Net.HttpWebRequest.ProcessResponse ()
РЕДАКТИРОВАТЬ: - Я понял.result.AsyncState возвращает ноль, потому что я передаю ноль, когда я вызываю BeginGetResponse (), вторым аргументом является AsyncState, и я передаю ноль там.Я должен передать текущий объект WebRequest туда, и это будет делать.
Итак, вместо следующего: -
item.BeginGetResponse
(
WriteResponseData, null
);
Я должен передать элемент: -
item.BeginGetResponse
(
WriteResponseData, item
);