Advertisement
MbahAgis

Async Await

Jul 22nd, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 3.17 KB | None | 0 0
  1. Imports System.ComponentModel
  2.  
  3. Public Class FrmSQL
  4.  
  5.     Dim sw As New Stopwatch()
  6.  
  7.     Public Async Function LoadDTAsync() As Task
  8.         Dim cDB As New CDataBase
  9.         Dim tasks As New List(Of Task(Of DataTable))
  10.         Await Task.Run(Sub()
  11.                            For i = 0 To 5
  12.                                tasks.Add(cDB.LoadDTDataAdapterAsync())
  13.                                Task.Delay(25)
  14.                            Next
  15.                        End Sub)
  16.         Dim results = Await Task.WhenAll(tasks)
  17.         For i = 0 To results.Length - 1
  18.             DirectCast(Controls("DGV" & i + 1), DataGridView).DataSource = results(i)
  19.         Next
  20.     End Function
  21.  
  22.     Private Async Sub BtnTask_Click(sender As Object, e As EventArgs) Handles BtnTask.Click
  23.         Label1.Text = ""
  24.         sw.Reset()
  25.         sw.Start()
  26.         For i = 0 To 5
  27.             DirectCast(Controls("DGV" & i + 1), DataGridView).DataSource = Nothing
  28.         Next
  29.  
  30.         Await LoadDTAsync()
  31.         Label1.Text = String.Format("{0:00}s : {1:00}ms", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds)
  32.         sw.Stop()
  33.     End Sub
  34.  
  35.     Private Sub BtnBgw_Click(sender As Object, e As EventArgs) Handles BtnBgw.Click
  36.         For i = 0 To 5
  37.             DirectCast(Controls("DGV" & i + 1), DataGridView).DataSource = Nothing
  38.         Next
  39.         Label1.Text = ""
  40.         sw.Reset()
  41.         sw.Start()
  42.         If Not Bgw.IsBusy Then
  43.             Bgw.RunWorkerAsync()
  44.         End If
  45.     End Sub
  46.  
  47.     Private Sub Bgw_DoWork(sender As Object, e As DoWorkEventArgs) Handles Bgw.DoWork
  48.         Dim lstDT As New List(Of DataTable)
  49.         Dim asd As New CDataBase
  50.         For i = 0 To 5
  51.             lstDT.Add(asd.LoadDTDataAdapter)
  52.         Next
  53.         e.Result = lstDT
  54.     End Sub
  55.  
  56.     Private Sub Bgw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles Bgw.RunWorkerCompleted
  57.         Dim lstDT As List(Of DataTable) = e.Result
  58.         For i = 0 To lstDT.Count - 1
  59.             DirectCast(Controls("DGV" & i + 1), DataGridView).DataSource = lstDT(i)
  60.         Next
  61.         Label1.Text = String.Format("{0:00}s : {1:00}ms", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds)
  62.         sw.Stop()
  63.     End Sub
  64. End Class
  65.  
  66. Public Class CDataBase
  67.  
  68.     Public Async Function LoadDTDataAdapterAsync() As Task(Of DataTable)
  69.         Using con As New SqlClient.SqlConnection("Server=(local);Database=dummy;Trusted_Connection=True;")
  70.             Using adp As New SqlClient.SqlDataAdapter("select * from tblAuthors", con)
  71.                 Using DT As New DataTable
  72.                     Await Task.Run(Sub() adp.Fill(DT))
  73.                     Return DT
  74.                 End Using
  75.             End Using
  76.             End Using
  77.     End Function
  78.  
  79.     Public Function LoadDTDataAdapter() As DataTable
  80.         Using con As New SqlClient.SqlConnection("Server=(local);Database=dummy;Trusted_Connection=True;")
  81.             Using adp As New SqlClient.SqlDataAdapter("select * from tblAuthors", con)
  82.                 Using DT As New DataTable
  83.                     adp.Fill(DT)
  84.                     Return DT
  85.                 End Using
  86.             End Using
  87.         End Using
  88.     End Function
  89. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement