【问题标题】:Correct use of async/await in VB.NET?在 VB.NET 中正确使用 async/await?
【发布时间】:2013-09-11 20:24:29
【问题描述】:

以下代码无法编译并出现错误:Value of type 'System.Threading.Tasks.Task(Of System.Data.DataTable)' cannot be converted to 'System.Data.DataTable

Private m_country_dt As DataTable = getCountriesAsync()


Private Async Function getCountriesAsync() As Task(Of DataTable)
    Dim dt As DataTable = Await Task(Of DataTable).Factory.StartNew(Function() getCountries_dt())

    Return dt
End Function

Private Function getCountries_dt() As DataTable
    Dim sp As New dbCore.StoredProcedure
    Return sp.GetAllCountries()
End Function

谁能告诉我我在这里做错了什么? GetAllCountries 是一个函数,用于查询 SQL 数据库中的所有国家/地区,并在 DataTable 中返回。此代码位于模块内部。

【问题讨论】:

  • Visual Studio 是否有原因将 getCountriesAsync 的返回类型自动更正为 Task(Of DataTable)
  • Async 方法必须返回 TaskTask(Of T)(或者,如果你绝对必须,void)。

标签: .net vb.net asynchronous


【解决方案1】:

您必须Await 才能解开Task (Of DataTable)

顺便说一句,你应该prefer Task.Run over Task.Factory.StartNew(我在我的博客上描述了原因)。虽然在这种情况下,我会尝试使用 ADO.NET 异步方法,而不是仅在后台任务上运行同步方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多