1

我想定义一个虚拟方法,它在基类中不是异步的,但在派生类中是异步的,调用者使用委托调用它(实际上它是由屏幕上的按钮激活的 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
    }
}
4

1 回答 1

6

调用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();
  }
}
于 2012-07-05T15:29:47.533 回答