Bar*_*osz 2 c# inheritance async-await
我不知道如何处理以下场景.有一个接口定义了一个事件处理方法'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
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我无法将方法调用标记为等待,因为它返回void.为事件处理程序提供异步void方法很好,因此无法将其更改为Task(它也不是我的代码).
那么,base.OnSomethingHappening()在进入自己的代码之前,我应该如何确保我的派生类正确执行?
这个解决方案在派生类中是否有意义?:
public override async void OnSomethingHappening()
{
await Task.Run(()=> base.OnSomethingHappening());
//some more code
}
Run Code Online (Sandbox Code Playgroud)
那么,在进入自己的代码之前,我应该如何确保我的派生类正确执行base.OnSomethingHappening()?
你没有.这就是async void应该避免使用方法的原因.它们没有为调用者提供任何可能的方法来知道操作何时完成,是否成功完成,或者错误是什么,如果有的话.如果您希望能够确保调用者能够知道有关该方法的信息,则需要返回a Task,而不是void.
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |