従来の ASP.NET Web ページに非同期呼び出しを実装しようとしています。
ここで見つけた指示に従っていますが、非同期で呼び出すことができますが、リクエストがタイムアウトしたときに非同期メソッドの実行をキャンセルする方法がわかりません (これは、私の実行を一時停止することで簡単に行うことができます)ブレークポイントでのコード)。
これまでの私のコードは次のとおりです。
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 しようとしても、非同期コードは引き続き実行されます。
どんな助けでも大歓迎です。