在网页上,我打电话给不允许我以编程方式设置超时的第三方。我调用 BeginInvoke 并使用 AsyncWaitHandle.WaitOne 等待指定的时间量。
如果调用超时,我会继续并忘记我开始的线程调用。我的问题是,在超时情况下我还需要以某种方式调用 EndInvoke 吗?这个 MSDN 页面上的“CAUTION”评论让我想知道我是否应该:http: //msdn.microsoft.com/en-us/library/2e08f6yc (VS.71).aspx
如果您认为我应该这样做,那么下一个问题是如果我的网页在第三方返回之前完成处理并返回到客户端,回调方法是否会在那里监听运行代码?一旦我的请求/响应完成,服务器是否不会停止寻找活动?
这是我正在使用的代码:
public class RemotePaymentProcessor
{
private delegate string SendProcessPaymentDelegate(string creditCardNumber);
private string SendProcessPayment(string creditCardNumber)
{
string response = string.Empty;
// call web service
SlowResponseService.SlowResponseService srs = new WebServiceTimeout.SlowResponseService.SlowResponseService();
response = srs.GetSlowResponse(creditCardNumber);
return response;
}
public string ProcessPayment(string creditCardNumber, int timeoutMilliseconds)
{
string response = string.Empty;
SendProcessPaymentDelegate sppd = new SendProcessPaymentDelegate(SendProcessPayment);
IAsyncResult ar = sppd.BeginInvoke(creditCardNumber, null, new object());
if (!ar.AsyncWaitHandle.WaitOne(timeoutMilliseconds, false))
{
// Async call did not return before timeout
response = "TIMEOUT";
}
else
{
// Async call has returned - get response
response = sppd.EndInvoke(ar);
}
return response;
}
}