4

このメソッドをC#からVBに変換する際に問題が発生しました。これは、C#で問題なく機能しています。

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

        dt = await client.ToDoAsync();
    }

私はVS2012で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

Webサービスは単純なデータテーブルを返しているだけです。

4

1 に答える 1

0

VS2012 より前の WCF プロキシ ジェネレーターは、イベントを使用して完了を*Async返し、通知するメソッドを生成していました。voidVS2012 の時点で、デフォルトで WCF プロキシ ジェネレーターは*Asyncを返すメソッドを生成しますTask<T>

プロキシを再生成してみてください。

それが機能しない場合は、作成する非同期メソッドのスタイルの「高度な」オプションを確認してください。3 つのスタイルがあります。非同期プログラミング モデル (APM) はBegin*/ End*/を使用しIAsyncResultます。イベントベースの非同期パターン (EAP) は*Async/ *Completed/を使用しAsyncCompletedEventArgsます。タスクベースの非同期パターン (TAP) は*Async/を使用しTaskます。

TAP はasync/awaitで自然に機能するので、それが必要です。

于 2012-12-19T02:12:51.853 に答える