为了账号安全,请及时绑定邮箱和手机立即绑定

*虚拟*方法缺少“await”;返回值?

*虚拟*方法缺少“await”;返回值?

C#
慕无忌1623718 2023-12-17 10:48:12
我有一个异步虚拟方法,它返回一个默认布尔值,该布尔值在我的应用程序的某些基本功能中使用。即,如果没有需要进行的设置,则假设它已成功。我理解非虚拟方法上下文中的警告方法,但我想知道实现的最佳方法这是一个 虚拟 方法。我应该在虚拟方法中返回什么以确保删除此警告?或者我应该忽略?// 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


查看完整回答
反对 回复 2023-12-17
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信