*虚拟* 方法缺少 'await' return 值?
*Virtual* method lacks 'await' return value?
我有一个异步虚拟方法,它 returns 是我应用程序的某些基本功能中使用的默认布尔值。即如果没有设置要做,假设它是成功的。
我理解 非虚拟 方法上下文中的警告方法,但我想知道在 虚拟 方法。我应该在虚拟方法中返回什么以确保删除此警告?还是我应该忽略?
// WARNING: This async method lacks 'await'
// virtual is the differentiating factor here
protected virtual async Task<bool> SetupAsync()
{
return true;
}
我知道您正在创建一个您希望被覆盖的 class,并且您想为 SetupAsync()
提供一个默认实现,它允许被覆盖的版本为 async
。
async
关键字不是方法签名的一部分,要覆盖方法必须复制该方法签名。只有 return 类型、参数和访问修饰符。
如果你的方法中没有异步代码,那么就不要使用async
。如果你想允许覆盖版本为 async
,那么你需要做的就是将其设为 return 为 Task
.
在您的默认实现(同步运行)中,您只需使用 Task.FromResult
.
return Task
中的一个值
例如:
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
关键字需要 return 一个 Task
的方法,但事实上它是 returning 一个 Task
改变了其他代码与其交互的方式。
我有一个异步虚拟方法,它 returns 是我应用程序的某些基本功能中使用的默认布尔值。即如果没有设置要做,假设它是成功的。
我理解 非虚拟 方法上下文中的警告方法,但我想知道在 虚拟 方法。我应该在虚拟方法中返回什么以确保删除此警告?还是我应该忽略?
// WARNING: This async method lacks 'await'
// virtual is the differentiating factor here
protected virtual async Task<bool> SetupAsync()
{
return true;
}
我知道您正在创建一个您希望被覆盖的 class,并且您想为 SetupAsync()
提供一个默认实现,它允许被覆盖的版本为 async
。
async
关键字不是方法签名的一部分,要覆盖方法必须复制该方法签名。只有 return 类型、参数和访问修饰符。
如果你的方法中没有异步代码,那么就不要使用async
。如果你想允许覆盖版本为 async
,那么你需要做的就是将其设为 return 为 Task
.
在您的默认实现(同步运行)中,您只需使用 Task.FromResult
.
Task
中的一个值
例如:
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
关键字需要 return 一个 Task
的方法,但事实上它是 returning 一个 Task
改变了其他代码与其交互的方式。