我想定义一个虚方法,它在基类中不是异步的,但在派生类中是异步的,调用者使用委托(delegate)调用它(实际上它是一个由屏幕上的按钮激活的 ICommand)我怎么能这样做。
public class BaseClass
{
BIONESSBindingCommand mLogoffCommand;
public ICommand LogoffCommand
{
get
{
if (mLogoffCommand == null)
{
mLogoffCommand = new BIONESSBindingCommand(
Param => Logoff(), //Command DoWork
Param => true); //Always can execute
}
return mLogoffCommand;
}
}
public virtual Task Logoff()
{
DoLogoff();
return null; //???
}
}
public class DerivedClass : BaseClass
{
public override async Task Logoff()
{
await SomeWoAsyncWork();
base.Logoff(); //Has warninngs
}
}
最佳答案
调用Task.FromResult
来获得一个完成的Task
。此外,在派生类中await
它(这将启用错误传播)。
public class BaseClass
{
public virtual Task Logoff()
{
DoLogoff();
return Task.FromResult(false);
}
}
public class DerivedClass : BaseClass
{
public override async Task Logoff()
{
await SomeWoAsyncWork();
await base.Logoff();
}
}
关于c# - Metro C# 中的虚拟异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347368/