VB Async/await 不适用于数据表

Posted

技术标签:

【中文标题】VB Async/await 不适用于数据表【英文标题】:VB Async/await not working with datatables 【发布时间】:2012-12-06 07:42:57 【问题描述】:

我在将此方法从 c# 转换为 VB 时遇到了一些问题,它在 C# 中完美运行:

    private async void Test()
    
        DataSet dt;
        var client = new xxxSoapClient();

        dt = await client.ToDoAsync();
    

我在 VS 2012 中使用 Async/await,在 c# 中一切正常,但是当尝试在 VB 中执行完全相同的操作时,它返回一个错误,表明 system.void 不可等待!!!

Private Async Sub Test()
    Dim dt As DataTable

    Dim Client As New xxxSoapClient
    dt = Await Client.ToDoAsync()
End Sub

webservice 只是返回一个简单的数据表,有人知道吗?

【问题讨论】:

【参考方案1】:

VS2012 之前的 WCF 代理生成器会生成 *Async 方法,这些方法返回 void 并使用事件发出完成信号。从 VS2012 开始,默认情况下 WCF 代理生成器将生成返回 Task<T>*Async 方法。

尝试重新生成代理。

如果这不起作用,请检查您的“高级”选项以了解要创建的异步方法的样式。还有three styles:异步编程模型(APM)使用Begin*/End*/IAsyncResult;基于事件的异步模式(EAP)使用*Async/*Completed/AsyncCompletedEventArgs;基于任务的异步模式 (TAP) 使用 *Async/Task

TAP 可以自然地与 async/await 配合使用,这就是您想要的。

【讨论】:

以上是关于VB Async/await 不适用于数据表的主要内容,如果未能解决你的问题,请参考以下文章

async/await 不适用于 ComponentDidMount 中的 react.js

理解ES7中的async/await

es6之 async await 使用小计

嵌套的 try、catch 和 async、await 请求

TAP 和 async/await 是不是意味着用于专用线程?

node.js异步多个等待不适用于用户注册