protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConnStr.Value);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "proc1"; //这个存储过程在查询分析器上需要2秒
cmd.CommandType = CommandType.StoredProcedure; try
{
conn.Open(); Response.Write("<h4>异步调用开始前-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + "</h4>");
Response.Write("<h5>cmd.BeginExecuteNonQuery</h5>");
IAsyncResult ar = cmd.BeginExecuteNonQuery(acallback, null);
Response.Write("<h4>异步调用开时后-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
Response.Write("<h5>ar.AsyncWaitHandle.WaitOne</h5>");
ar.AsyncWaitHandle.WaitOne();
Response.Write("<h4>异步调用等待后-当前时间:" + DateTime.Now.ToString("hh:mm:ss:fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
Response.Write("<h5>cmd.EndExecuteNonQuery</h5>");
cmd.EndExecuteNonQuery(ar);
Response.Write("<h4>异步调用完成后-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
}
finally
{
conn.Close();
} }
public void acallback(IAsyncResult ar)
{
Response.Write("<h3>异步回调-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h3>");结果是:
异步调用开始前-当前时间:04:45:24 328
cmd.BeginExecuteNonQuery
异步调用开时后-当前时间:04:45:24 328,完成状态:False
ar.AsyncWaitHandle.WaitOne //<strong>为什么等待瞬间就结束了?不是说异步吗?</strong>
异步调用等待后-当前时间:04:45:24:328,完成状态:True
cmd.EndExecuteNonQuery //<strong>为什么完成结果要这么长时间?不是说异步吗?</strong>
异步回调-当前时间:04:45:25 984,完成状态:False //<strong>为什么不是True?</strong>
异步调用完成后-当前时间:04:45:27 156,完成状态:False //<strong>为什么不是True???</strong>快来人啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
SqlConnection conn = new SqlConnection(ConnStr.Value);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "proc1"; //这个存储过程在查询分析器上需要2秒
cmd.CommandType = CommandType.StoredProcedure; try
{
conn.Open(); Response.Write("<h4>异步调用开始前-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + "</h4>");
Response.Write("<h5>cmd.BeginExecuteNonQuery</h5>");
IAsyncResult ar = cmd.BeginExecuteNonQuery(acallback, null);
Response.Write("<h4>异步调用开时后-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
Response.Write("<h5>ar.AsyncWaitHandle.WaitOne</h5>");
ar.AsyncWaitHandle.WaitOne();
Response.Write("<h4>异步调用等待后-当前时间:" + DateTime.Now.ToString("hh:mm:ss:fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
Response.Write("<h5>cmd.EndExecuteNonQuery</h5>");
cmd.EndExecuteNonQuery(ar);
Response.Write("<h4>异步调用完成后-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h4>");
}
finally
{
conn.Close();
} }
public void acallback(IAsyncResult ar)
{
Response.Write("<h3>异步回调-当前时间:" + DateTime.Now.ToString("hh:mm:ss fff") + ",完成状态:" + ar.IsCompleted + "</h3>");结果是:
异步调用开始前-当前时间:04:45:24 328
cmd.BeginExecuteNonQuery
异步调用开时后-当前时间:04:45:24 328,完成状态:False
ar.AsyncWaitHandle.WaitOne //<strong>为什么等待瞬间就结束了?不是说异步吗?</strong>
异步调用等待后-当前时间:04:45:24:328,完成状态:True
cmd.EndExecuteNonQuery //<strong>为什么完成结果要这么长时间?不是说异步吗?</strong>
异步回调-当前时间:04:45:25 984,完成状态:False //<strong>为什么不是True?</strong>
异步调用完成后-当前时间:04:45:27 156,完成状态:False //<strong>为什么不是True???</strong>快来人啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//异步查询的poll方式,最普通的方式
private void BindData()
{
string QueryStr = "SELECT * FROM customers";
using (SqlConnection Con = new SqlConnection(ConStr))
{
SqlCommand Cmd = new SqlCommand(QueryStr, Con);
IAsyncResult ASynResult;
SqlDataReader Da;
try
{
Con.Open();
//begin方法返回一个IAsyncResult对象,用来检查执行是否完成
ASynResult = Cmd.BeginExecuteReader(CommandBehavior.CloseConnection);
while (!ASynResult.IsCompleted)
{
Response.Write("异步查询</br>");
ASynResult.AsyncWaitHandle.WaitOne(3000, true);
//System.Threading.Thread.Sleep(10);
}
Da = Cmd.EndExecuteReader(ASynResult);
GridView1.DataSource = Da;
GridView1.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
} }
如果楼主还有什么问题可以去我的博客看一下,里面还有异步调用的其他相关代码:
http://blog.csdn.net/oyjd614/