在 VB 中正确使用 Async/Await

cjw*_*cjw 2 vb.net asynchronous

我无法使用 Async/Await 从 WCF 服务获取数据表并将其加载到 datagridview 中。这是我第一次这样做,我觉得我缺少一些基本的东西。这是我到目前为止的代码:

Private p_oDataService As New SQLService.DataServiceClient

Async Function GetReportDataTable() As Task(Of DataTable)
  Try
    p_oDataService = New SQLService.DataServiceClient
    Dim tDatatable As Task(Of DataTable) = p_oDataService.GetValidationReportsAsync()
    Dim dt As DataTable = Await tDatatable
    Return dt
  Catch ex As Exception
    Throw ex
  End Try
End Function 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  Try
    Dim tDT As Task(Of DataTable) = GetReportDataTable()
    Dim dt As DataTable = GetReportDataTable.Result
    DataGridView1.AutoGenerateColumns = True
    DataGridView1.DataSource = dt
  Catch ex As Exception
    Throw ex
  End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

Nko*_*osi 6

您正在混合阻塞和异步调用。当你调用GetReportDataTable.Result它时会死锁。

事件处理程序允许您等待异步任务以及更新事件处理程序...

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
      Dim dt As DataTable = Await GetReportDataTable()
      DataGridView1.AutoGenerateColumns = True
      DataGridView1.DataSource = dt
    Catch ex As Exception
      Throw ex
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)