我不确定如何处理以下情况。有一个定义事件处理方法 '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 方法是可以的,因此无法将其更改为 Task(也不是我的代码)。
那么,我应该如何确保我的派生类在执行自己的代码之前正确地执行 base.OnSomethingHappening()?
这个解决方案在派生类中是否有意义?
public override async void OnSomethingHappening()
{
await Task.Run(()=> base.OnSomethingHappening());
//some more code
}