C# metro c中的虚拟异步方法
我想定义一个虚拟方法,它在基类中不是异步的,但在派生类中是异步的,调用方使用委托调用它。实际上,它是一个ICommand,由屏幕上的按钮激活。我如何做到这一点C# metro c中的虚拟异步方法,c#,asynchronous,windows-runtime,task-parallel-library,async-await,C#,Asynchronous,Windows Runtime,Task Parallel Library,Async Await,我想定义一个虚拟方法,它在基类中不是异步的,但在派生类中是异步的,调用方使用委托调用它。实际上,它是一个ICommand,由屏幕上的按钮激活。我如何做到这一点 public class BaseClass { BIONESSBindingCommand mLogoffCommand; public ICommand LogoffCommand { get { if (mLogoffCommand == null)
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以获取已完成的任务。另外,在派生类中等待它,这将启用错误传播
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();
}
}
调用Task.FromResult以获取已完成的任务。另外,在派生类中等待它,这将启用错误传播
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();
}
}
除了在构造函数中指定属性和方法之外,您正在做的事情难道不起作用吗?除了在构造函数中指定属性和方法之外,您正在做的事情难道不起作用吗?不。任务源于任务。对,它在语法上起作用,但它有点像返回对象的方法。一点也不。它是一个返回基类型的方法。使用Task时,不会丢失任何语义,也不会出现装箱问题。我同意如果有一个Task.FromResult返回的只是一个普通任务,并且我在我的中提供了一个任务,那会更干净,但是.NET没有提供。他们认为返回任务就足够了。对于任何使用.NET 4的Microsoft Async软件包的人来说,这些静态方法中有很多都在TaskEx中,而不是Task中,包括TaskEx.FromResult…@batmaci:Yes;请注意,它是异步接口方法的同步实现。否。Task源于Task。对,这在语法上是有效的,但它有点像返回Object的方法。一点也不。它是一个返回基类型的方法。使用Task时,不会丢失任何语义,也不会出现装箱问题。我同意如果有一个Task.FromResult返回的只是一个普通任务,并且我在我的中提供了一个任务,那会更干净,但是.NET没有提供。他们认为返回任务就足够了。对于任何使用.NET 4的Microsoft Async软件包的人来说,这些静态方法中有很多都在TaskEx中,而不是Task中,包括TaskEx.FromResult…@batmaci:Yes;请注意,它是异步接口方法的同步实现。