Я использую асинхронные вызовы для связи с моим сервером. Я написал некоторый компонент для сбора всех неавторизованных запросов и их повторной отправки после входа пользователя в систему. Я написал тест для создания 10 потоков, которые отправляют некоторые запросы без предварительной авторизации. Затем я жду 20 секунд и делаю авторизацию, а после этого жду успешного завершения запроса. Но проблема возникла в методе EndGetResponse, который я вызываю в своем методе обратного вызова. Я сделал это так:
public void InternalCallback(IAsyncResult result)
{
try
{
RequestState state = (RequestState)result.AsyncState;
IHttpWebRequest request = state.Request;
using (IHttpWebResponse response = responseGetter.GetResponse(request, result))
{
// ...
}
}
// ...
}
Итак, я создал некоторый пользовательский класс RequestState, у которого есть несколько обратных вызовов более высокого уровня, которые мне нужны, и у него есть запрос, который я буду использовать для вызова метода EndGetResponse. Но так я получил ошибку:
IAsyncResult object was not returned from the corresponding asynchronous method.
Я изменил это, поэтому теперь у меня есть поле Request в моем классе обратного вызова, которое я установил перед вызовом BeginGetResponse, и я использую это поле Request при вызове EndGetResponse в моем обратном вызове.
public void InternalCallback(IAsyncResult result)
{
try
{
using (IHttpWebResponse response = responseGetter.GetResponse(this.Request, result))
{
// ...
}
}
// ...
}
Это новое решение действительно? Можете ли вы предложить это хороший способ сделать это или как я должен это сделать?