c# - Metro C# 中的虚拟异步方法

标签 c# asynchronous windows-runtime task-parallel-library async-await

我想定义一个虚方法,它在基类中不是异步的,但在派生类中是异步的,调用者使用委托(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/

相关文章:

javascript - Redux reducer promise 处理

javascript - 我如何使用带有 promise 和延迟的 TestScheduler?

windows-runtime - 公共(public)成员的签名包含 native 类型

wpf - 在 WinRT 中更改插入符号颜色?

windows-runtime - 在 Windows 应用商店应用程序上实现带下划线的超链接的最佳方法?

c# - 将 List<String^> 从 C++ 传递到 C#

c# - 如何在长行返回关键字后阻止 Resharper 换行?

c# - 如何使用依赖项的假对象对静态方法进行单元测试?

C# 为什么 Task WhenAll 会阻塞 UI 线程?但不是每一行的等待?

c# - 我无法使用 wpf 设置 Web 文本框值