15

Windows 7 x64 の VS2012 で Code Contracts 1.4.51019.0 を使用すると、ccrewrite から次のコンパイル エラーが発生します。「メソッドまたは操作が実装されていません。」

これは、プロパティ アクセサーの組み合わせとasync、 inner がないメソッドの使用が原因のようawaitです。

再現手順:

「フル」ランタイム コントラクト チェックを有効にして、新しいクラス ライブラリを作成します。

namespace CodeContractsAsyncBug
{
    using System.Threading.Tasks;

    public class Service
    {
        // Offending method!
        public async Task ProcessAsync(Entity entity)
        {
            var flag = entity.Flag;
        }
    }

    public class Entity
    {
        public bool Flag { get; set; }
    }
}

他の誰かがこれを経験しましたか?

4

4 に答える 4

2

そうでないasyncメソッドawaitは、通常、プログラミング エラーを示しています。この状況を知らせるコンパイラ警告があります。

非同期シグネチャを使用してメソッドを同期的に実装する場合、これを行う通常の方法は、非メソッドを実装してなどasyncの を返すことです。このアプローチでは、例外は返された に配置されるのではなく、同期的に発生することに注意してください。TaskTask.FromResult<object>(null)Task

于 2013-01-13T16:46:52.047 に答える
1

過去数か月にわたって、非同期メソッドの書き換えに関する多くの問題を修正しました。最新のインストーラーでコードを再試行することをお勧めします。それでも問題が解決しない場合は、完全な再現を提供してください。

于 2013-04-25T16:42:49.887 に答える
0

asyncキーワードはそれを表していると思います。コード中に待機していて、タスクが生成され、メソッドが呼び出されたときに処理されるか、タスクを明示的に返す必要があります。

于 2013-01-13T14:17:01.193 に答える