当前位置: 首页 > 知识库问答 >
问题:

*Virtual*方法缺少'await'返回值?

酆奇文
2023-03-14
// WARNING: This async method lacks 'await'
// virtual is the differentiating factor here
protected virtual async Task<bool> SetupAsync()
{
    return true;
}

共有1个答案

督翰学
2023-03-14

我知道您正在创建一个希望被重写的类,并且您希望为setupasync()提供一个默认实现,该实现允许被重写的版本为Async

Async关键字不是要重写的方法必须复制的方法签名的一部分。只有返回类型、参数和访问修饰符。

如果方法中没有异步代码,那么不要使用Async。如果您希望允许重写的版本为异步,那么您所需要做的就是让它返回一个任务

例如:

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。确实,使用Async关键字要求该方法返回任务,但它返回任务的事实改变了其他代码与它的交互方式。

 类似资料:
  • 问题内容: 我敢肯定这个问题已经问过了,但是找不到嵌套的if-else和switch-case逻辑解决我的问题的答案。 我有两个部分,每个部分都有两个自定义单元格。就是这样。4格。但是无论我做什么,都会得到“在期望返回的函数中缺少返回” 问题 如何更改此设置,以便在底部获得满足快速逻辑的else语句? 任何帮助将不胜感激 问题答案: 在方法开始时声明单元格, 根据部分和行号为单元格分配一个值, 在

  • } 当我运行这段代码时,我得到以下错误: 我该怎么做来解决这个问题呢? 见下面的条件:给定一个从1到4(含)的数字,返回该数字的一个单词表示。例如,给定2,返回2。如果数字大于4,则返回短语“太大”。如果数字小于1,则返回短语too small。

  • 我有一个接口,其中包含一些返回的函数。实现接口的一些类不需要等待任何东西,而其他类可能只是抛出--因此警告是虚假的和令人讨厌的。

  • 问题内容: 好了,我正在尝试编写这段代码,但是我一直收到这个愚蠢的错误。我不知道我在做什么错,所以也许你们中的一位专家可以帮助我。 } 问题答案: 在方法if 中,该方法不返回任何值。如果相同 应该是这样的:

  • 警告试着告诉我什么?我该怎么办? 这是我的代码:它是否使用多线程运行?