【发布时间】:2018-02-13 23:37:12
【问题描述】:
我不确定如何处理以下情况。有一个接口定义了事件处理方法'OnSomethinHappening()'。
有一个基类将其实现为虚拟方法,并在其中使用了一些异步代码。
有一个派生类想重写虚方法,还要调用base.OnSomethingHappening()。
public interface ISomething
{
void OnSomethingHappening();
}
public class BaseClass
{
public virtual async void OnSomethingHappening()
{
await Task.Delay(1999);
}
}
public class DerivedClass : BaseClass
{
public override void OnSomethingHappening()
{
base.OnSomethingHappening();
//some more code
}
}
问题是,我无法将方法调用标记为可等待,因为它返回 void。为事件处理程序提供异步 void 方法很好,因此不能将其更改为任务(这也不是我的代码)。
那么,在去拥有自己的代码之前,我应该如何确保我的派生类正确执行base.OnSomethingHappening()?
这个解决方案在派生类中有意义吗?:
public override async void OnSomethingHappening()
{
await Task.Run(()=> base.OnSomethingHappening());
//some more code
}
【问题讨论】:
-
我也有同样的问题。 @Stephen Cleary 你能帮忙吗?
标签: c# inheritance async-await