すべてのデータを取得するのに約2〜3分かかるレポートがあります
そのため、タイムアウトを防ぐためにASP.net非同期ページを使用しようとしています。しかし、それを機能させることはできません
これが私がしていることです:
private delegate List<PublishedPagesDataItem> AsyncReportDataDelegate();
private AsyncReportDataDelegate longRunningMethod;
private List<PublishedPagesDataItem> reportData;
public PublishedPagesReport() // this is the constructor
{
reportData = new List<PublishedPagesDataItem>();
longRunningMethod = GetReportData;
}
protected void Page_Load(object sender, EventArgs e)
{
this.PreRenderComplete +=
new EventHandler(Page_PreRenderComplete);
AddOnPreRenderCompleteAsync(
new BeginEventHandler(BeginAsynchOperation),
new EndEventHandler(EndAsynchOperation)
);
}
private List<PublishedPagesDataItem> GetReportData()
{
// this is a long running method
}
private IAsyncResult BeginAsynchOperation(object sender, EventArgs e, AsyncCallback cb, object extradata)
{
return longRunningMethod.BeginInvoke(cb, extradata);
}
private void EndAsynchOperation(IAsyncResult ar)
{
reportData = longRunningMethod.EndInvoke(ar);
}
private void Page_PreRenderComplete(object sender, EventArgs e)
{
reportGridView.DataSource = reportData;
reportGridView.DataBind();
}
したがって、長時間実行メソッド(GetReportData)を表すデリゲートがあります。
そして、私はこの記事のようにそれを呼ぼうとしています:
http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
長時間実行されるメソッドはデバッガーで完了しますが、EndAsynchOperationメソッドとPage_PreRenderCompleteメソッドのブレークポイントがヒットすることはありません
私が間違っていることについて何か考えはありますか?