我正在使用异步调用来与我的服务器进行通信。我写了一些组件来收集所有未经授权的请求,并在用户登录后重新发送它们。我写了一些测试来产生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之前设置了它,并且在我的回调中调用EndGetResponse时使用了Request字段。
public void InternalCallback(IAsyncResult result)
{
try
{
using (IHttpWebResponse response = responseGetter.GetResponse(this.Request, result))
{
// ...
}
}
// ...
}
这个新解决方案有效吗?您能否建议这样做的好方法或我该怎么做?