【发布时间】:2017-10-19 04:12:30
【问题描述】:
我正在学习关于如何在 .NET 核心中开发全栈项目的 PluralSight 课程,并且遇到了无数错误,SO 和一些甜蜜的 Google-fu 帮助我理解了(主要是由于 VS 版本差异)。
但是我刚刚遇到了一些更...复杂的事情?我正在使用具有此方法的界面IWorldRepository:
public interface IWorldRepository
{
async Task<bool> SaveChangesAsync(); // <-- error occurs here
}
哪个接口带有这个方法的类 (WorldRepository):
public async Task<bool> SaveChangesAsync()
{
return (await _context.SaveChangesAsync()) > 0;
}
根据我使用 .NET 的经验,这应该可以正常工作,但由于某种原因,界面会抱怨它,说:“修饰符 'async' 对此项目无效。” p>
我四处寻找错误并找到我们亲爱的解释 Jon Skeet。但是我并没有真正理解可能发生的事情以及为什么我的代码是错误的。
它不仅看起来不错,而且对于在 PluralSight 上运行相同代码的讲师来说似乎工作得很好。
如果有人能对此有所了解,我将不胜感激!
【问题讨论】:
-
您不能将接口成员定义为
async。删除关键字,这将编译。 -
“对于运行相同代码的讲师来说工作正常” - 这不可能。包含
async Task<bool> SaveChangesAsync();的接口将无法编译 -
我就是这么想的。那么编译器是否理解(在运行时)该方法默认是异步的(因为使用了任务)?编写这样的代码(性能和气味方面)有什么影响吗?
-
你可能是对的,@Alex。但如果是这样的话,那么他在视频中没有提到它......
-
这表明您对
async的真正作用存在误解 - 它所做的是更改方法的 实现 并允许在其中使用await关键字它。它不是方法签名的一部分,它是一个实现细节。
标签: c# asynchronous interface task