我有一个异步虚拟方法,它返回一个默认布尔值,该布尔值在我的应用程序的某些基本功能中使用。即,如果没有需要进行的设置,则假设它已成功。我理解非虚拟方法上下文中的警告方法,但我想知道实现的最佳方法这是一个 虚拟 方法。我应该在虚拟方法中返回什么以确保删除此警告?或者我应该忽略?// WARNING: This async method lacks 'await'// virtual is the differentiating factor hereprotected virtual async Task<bool> SetupAsync(){ return true;}
1 回答
慕森卡
TA贡献1806条经验 获得超8个赞
我了解您正在创建一个希望被重写的类,并且您希望为 SetupAsync() 提供默认实现,以允许重写版本async.
async 关键字不是方法签名的一部分,必须复制方法签名才能覆盖方法。只有返回类型、参数和访问修饰符。
如果您的方法中没有异步代码,则不要使用async。如果您想允许覆盖版本为 async,那么您所需要做的就是让它返回 Task。
在默认实现(同步运行)中,您只需使用 在 Task 中返回一个值。Task.FromResult
例如:
class Test {
protected virtual Task<bool> SetupAsync() {
return Task.FromResult(true);
}
}
class Test2 : Test {
protected override async Task<bool> SetupAsync() {
await Task.Delay(1000);
return false;
}
}
重写方法与该方法的内部工作原理无关,而是与该方法如何暴露给其他代码有关。任何代码都必须能够以与默认实现相同的方式调用重写的方法,并且 async 关键字本身与此没有任何关系。
async 关键字仅允许在方法内使用 。确实,使用 关键字需要方法返回 ,但事实上它是 返回 会改变其他代码与其交互的方式。await asyncTaskTask
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消