为什么以下使用 PageAsyncTask 的 ASP.NET 代码总共执行 8 秒,无论我是按原样运行它还是我用 PageAsyncTask 注释 2 行并在 Page_load 中取消注释 Thread.Sleep(5000)?:
//PageAsyncTask asyncTask1 = new PageAsyncTask(BeginAsyncOperation,
EndAsyncOperation,
OperationTimeOut, arr, true);
//Page.RegisterAsyncTask(asyncTask1);
Thread.Sleep(5000);
我知道 PageAsyncTask 与其他任务并行运行一个任务,并且在这种情况下应该使页面加载的整个过程更快。我错过了什么?
public partial class _Default : System.Web.UI.Page
{
public delegate string foo(string param1, string param2);
public IAsyncResult BeginLongRunningTransaction(AsyncCallback cb, object state)
{
var arr = (string[])state;
string z1 = arr[0];
string z2 = arr[1];
foo method = this.LongRunningTransaction;
return method.BeginInvoke(z1, z2, cb, state);
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(DateTime.Now.ToString() + "<br/>");
string[] arr = { "Zorik1", "Zorik2" };
// if I comment following two lines and un-comment
// Thread.Sleep(5000) command the process runs 8 sec. regardless
PageAsyncTask asyncTask1 = new PageAsyncTask(BeginAsyncOperation, EndAsyncOperation, OperationTimeOut, arr, true);
Page.RegisterAsyncTask(asyncTask1);
//Thread.Sleep(5000);
Thread.Sleep(1000);
Thread.Sleep(1000);
Thread.Sleep(1000);
}
private IAsyncResult BeginAsyncOperation(object sender, EventArgs e,
AsyncCallback cb, object state)
{
return this.BeginLongRunningTransaction(cb, state);
}
private string LongRunningTransaction(string param1, string param2)
{
Thread.Sleep(5000);
txtAsync.Text = "Updated";
updPnl1.Update();
return "this is return string";
}
private void EndAsyncOperation(IAsyncResult ar)
{
}
private void OperationTimeOut(IAsyncResult asyncResult)
{
string a = "";
}
protected void Page_PreRender(object s, EventArgs e)
{
string a = "";
Response.Write(DateTime.Now.ToString() + "<br/>");
}
protected void Page_PreRenderComplete(object s, EventArgs e)
{
Response.Write(DateTime.Now.ToString() + "<br/>");
}
}