我正在尝试在经典的 ASP.NET 网页中实现异步调用。
我按照我在这里找到的说明进行操作,我可以让它异步调用,但我不知道如何在请求超时时取消异步方法的执行(我可以通过暂停执行我的断点处的代码)。
到目前为止,我的代码如下:
protected void Button_Click(object sender, EventArgs e)
{
PageAsyncTask task = new PageAsyncTask(OnBegin, OnEnd, OnTimeout, null);
Page.RegisterAsyncTask(task);
Page.AsyncTimeout = new TimeSpan(0, 0, 10);
Page.ExecuteRegisteredAsyncTasks();
}
protected delegate void AsyncTaskDelegate();
private AsyncTaskDelegate _dlgt;
public IAsyncResult OnBegin(object sender, EventArgs e, AsyncCallback cb, object extraData)
{
_dlgt = new AsyncTaskDelegate(ExecuteAsyncTask);
IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);
return result;
}
public void OnEnd(IAsyncResult ar)
{
_dlgt.EndInvoke(ar);
}
private void ExecuteAsyncTask()
{
MyObject obj = new MyObject();
var task = obj.CompleteAsync();
if (obj.Complete())
{
LabelResult.Text = "Success";
}
else
{
LabelResult.Text = "Failed";
}
}
public void OnTimeout(IAsyncResult ar)
{
_dlgt.EndInvoke(ar);//this does not work!
}
我遇到的主要问题是,当我调用外部服务时,代码可能会在异步方法中的某个点“挂起”,并且在某些情况下它可能会停止响应。
即使我尝试 EndInvoke 请求,异步代码仍然运行。
任何帮助,将不胜感激。