阿宽

Nothing is more powerful than habit!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ADO.NET中异步处理的方式——Poll方式

Posted on 2011-02-15 15:39  宽田  阅读(711)  评论(0编辑  收藏  举报

Ado.Net有三种异步处理方式:Poll方式,Wait方式和函数回调方式。

 

Poll方式:此方式是启动异步进程,再选择IAsyncResult对象,看看进程何时完成
Wait方式:此方式将等待句柄关联到异步进程上。等待全部或部分进程的完成,以便对它们执行相应的处理。

 

 

函数回调方式:是异步调用结束时回调函数将被触发,并且取出结果集显示在屏幕上。

 

对于异步处理的用途我没有用到过。 网上有人说当大数据量时或多个处理一起执行时等可以使用,这有待以后研究。

 

Poll方式使用方法

 

用代码来说明。

在页面上放一个GridView用于取数据。

 

<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:GridView ID="gvData" runat="server">
        
</asp:GridView>
    
</div>
    
</form>
</body>

使用Poll方式取出数据。

using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace AdoAsyncDB
{
    
/// <summary>
    
/// Poll方式
    
/// </summary>
    public partial class PollMethod : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            UsePollMethod();
        }

        
private void UsePollMethod()
        {
            SqlConnection connection;
            SqlCommand sqlcommand 
= new SqlCommand();
            SqlDataReader dataReader;
            IAsyncResult asyncResult;

            Response.Write(
"程序已启动……<br/>");
            connection 
= new SqlConnection(ConfigurationManager.ConnectionStrings["NorthWindDB"].ConnectionString);
            sqlcommand.CommandText 
= "select companyName,contactName,city,postalCode from dbo.Customers";
            sqlcommand.CommandType 
= CommandType.Text;
            sqlcommand.Connection 
= connection;
            connection.Open();
            DateTime startDatetime 
= DateTime.Now;
            asyncResult 
= sqlcommand.BeginExecuteReader(CommandBehavior.CloseConnection);
            
while (!asyncResult.IsCompleted)
            {
                Response.Write(
"正在取资料……<br/>");
                Response.Flush();
                System.Threading.Thread.Sleep(
3000);
            }           
            dataReader 
= sqlcommand.EndExecuteReader(asyncResult);
            DateTime endDatetime 
= DateTime.Now;
            TimeSpan timeSpan 
= endDatetime.Subtract(startDatetime);
            Response.Write(
"资料取出完成,总其用时" + timeSpan.Milliseconds + "毫秒");
            Response.Flush();
            gvData.DataSource 
= dataReader;
            gvData.DataBind();

            connection.Close();
        }
    }
}


代码下载:AdoAsyncDB.rar

 

文章汇总:

ADO.NET中异步处理的方式——Poll方式

ADO.NET中异步处理的方式——Wait方式

ADO.NET中异步处理的方式——函数回调方式