4

我在将此方法从 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

网络服务只是返回一个简单的数据表,有人想吗?

4

1 回答 1

0

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

尝试重新生成代理。

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

TAP 自然地与async/一起工作await,所以这就是你想要的。

于 2012-12-19T02:12:51.853 回答