Use of the WaitAny method of processing multiple asynchronous processes (VB) : IAsyncResult « ADO.net Database « ASP.NET Tutorial






<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration" %>

<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
        Dim DBCon As SqlConnection
        Dim OrdersCommand As SqlCommand = New SqlCommand()
        Dim CustCommand As SqlCommand = New SqlCommand()
        Dim OrdersReader As SqlDataReader
        Dim CustReader As SqlDataReader
        Dim OrdersASyncResult As IAsyncResult
        Dim CustAsyncResult As IAsyncResult

        Dim WHIndex As Integer
        Dim WHandles(1) As Threading.WaitHandle
        Dim OrdersWHandle As Threading.WaitHandle
        Dim CustWHandle As Threading.WaitHandle

        DBCon = New SqlConnection()
        DBCon.ConnectionString = ConfigurationManager.ConnectionStrings("DSN_NorthWind").ConnectionString

        CustCommand.CommandText = " SELECT * FROM Customers WHERE CompanyName = 'A' "

        CustCommand.CommandType = CommandType.Text
        CustCommand.Connection = DBCon

        OrdersCommand.CommandText = _
                " SELECT Customers.CompanyName, Customers.ContactName, " & _
                " Orders.OrderID, Orders.OrderDate, " & _
                " Orders.RequiredDate, Orders.ShippedDate " & _
                " FROM Orders, Customers " & _
                " WHERE Orders.CustomerID = Customers.CustomerID " & _
                " AND Customers.CompanyName = 'Alfreds Futterkiste' " & _
                " ORDER BY Customers.CompanyName, Customers.ContactName "

        OrdersCommand.CommandType = CommandType.Text
        OrdersCommand.Connection = DBCon

        DBCon.Open ()

        CustAsyncResult = CustCommand.BeginExecuteReader()

        OrdersASyncResult = OrdersCommand.BeginExecuteReader()

        CustWHandle = CustAsyncResult.AsyncWaitHandle
        OrdersWHandle = OrdersASyncResult.AsyncWaitHandle

        WHandles(0) = CustWHandle
        WHandles(1) = OrdersWHandle

        For Index As Integer = 0 To 1
            WHIndex = Threading.WaitHandle.WaitAny(WHandles)

            Select Case WHIndex
                Case 0
                    CustReader = CustCommand.EndExecuteReader(CustAsyncResult)

                    gvCustomers.DataSource = CustReader
                    gvCustomers.DataBind()                    
                Case 1
                    OrdersReader = _
                       OrdersCommand.EndExecuteReader(OrdersASyncResult)

                    gvOrders.DataSource = OrdersReader
                    gvOrders.DataBind()

            End Select
        Next

        DBCon.Close()
    End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>The Wait Any Approach</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView ID="gvCustomers" Width="100%" Runat="server"></asp:GridView>
    <br /><br />
    <asp:GridView ID="gvOrders" Width="100%" AutoGenerateColumns="False"         
        Runat="server">
        <Columns>
        <asp:BoundField HeaderText="Company Name" 
            DataField="CompanyName"></asp:BoundField>
        <asp:BoundField HeaderText="Contact Name" 
            DataField="ContactName"></asp:BoundField>
        <asp:BoundField HeaderText="Order Date" DataField="orderdate" 
            DataFormatString="{0:d}"></asp:BoundField>
        <asp:BoundField HeaderText="Required Date" DataField="requireddate" 
            DataFormatString="{0:d}"></asp:BoundField>
        <asp:BoundField HeaderText="Shipped Date" DataField="shippeddate" 
            DataFormatString="{0:d}"></asp:BoundField>
        </Columns>
    </asp:GridView>
    </div>
    </form>
</body>
</html>
File: Web.config

<configuration>

  <connectionStrings>
        <add name="DSN_Northwind" 
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
             providerName="System.Data.SqlClient" />

    </connectionStrings>

</configuration>








18.47.IAsyncResult
18.47.1.The wait approach of handling a single asynchronous process (C#)
18.47.2.The wait approach of handling a single asynchronous process (VB)
18.47.3.Use of the WaitAny method of processing multiple asynchronous processes (C#)
18.47.4.Use of the WaitAny method of processing multiple asynchronous processes (VB)
18.47.5.The Poll approach of working with asynchronous commands (C#)
18.47.6.The Poll approach of working with asynchronous commands (VB)