15

在 Windows 7 x64 上的 VS2012 中使用 Code Contracts 1.4.51019.0 时,我从 ccrewrite 收到以下编译错误:“方法或操作未实现。”

它似乎是由属性访问器的组合和使用async缺少内部的方法引起的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方法并返回 a Task,例如Task.FromResult<object>(null). 请注意,使用这种方法,异常会同步引发,而不是放在返回的Task.

于 2013-01-13T16:46:52.047 回答
2

这似乎在代码合同 1.5 版中得到修复。

于 2013-10-09T16:38:07.533 回答
1

在过去的几个月里,我们修复了许多重写异步方法的问题。我建议您在最新的安装程序上再次尝试您的代码,如果您仍然遇到问题,请提供完整的重现。

于 2013-04-25T16:42:49.887 回答
0

我相信 async 关键字只是代表这一点 - 要么你在代码中有一个 await ,它将生成一个 Task 并在调用方法时处理,或者你需要显式地返回一个 Task 。

于 2013-01-13T14:17:01.193 回答