当前位置: 首页 > 知识库问答 >
问题:

从基类重写异步空事件处理程序方法

商皓
2023-03-14

我不确定如何处理以下情况。有一个接口定义了事件处理方法“onSomethinAccounting()”。

有一个基类将其实现为虚拟方法,并在其中使用一些异步代码。

有一个派生类要重写虚方法,但也要调用基。onsomethinghapping()

 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方法,因此不能将其更改为任务(这也不是我的代码)。

那么,我应该如何确保我的派生类执行基呢。在使用自己的代码之前,是否正确地使用OnSomethingApping()

这个解决方案在派生类中有意义吗?:

public override async void OnSomethingHappening()
        {
           await Task.Run(()=> base.OnSomethingHappening());
            //some more code
        }

共有1个答案

寿和通
2023-03-14

那么,我应该如何确保我的派生类执行基类呢。在使用自己的代码之前,是否正确地在某些事情上显示()?

你没有。这就是为什么应该避免使用async void方法。它们无法让调用者知道操作何时完成、是否成功完成,或者错误是什么(如果有)。如果希望能够确保调用方能够知道有关该方法的信息,则需要返回任务,而不是无效

 类似资料:
  • 我在MonoForAndroid中有一个活动,它利用Zaxy. Net. Mobile在Android上扫描条形码。就扫描和返回结果而言,一切都很好。但是,当我尝试处理scanOverlie上的任何事件时,我得到nullRe的异常。我的代码在下面,任何帮助都将不胜感激。 上面的所有代码都工作正常。但是,当我尝试处理布局上的完成按钮时,我得到了NullRe的异常 下面是例外的详细信息

  • 我的完成处理程序有问题。下面是一个带有完成处理程序的函数,位于一个实用程序文件中: 我在视图控制器中调用它 输出清楚地表明该函数在运行该块之前没有等待完成: 我如何解决这个问题?

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 线程中使用 java.lang.Runnable 如果用户在代码中通过 java.lang.Runnable 新启动了线程或者采用了线程池去异步地处理一些业务,那么需要将 SOFATracer 日志上下文从父线程传递到子线程中去,SOFATracer 提供的 com.alipay.common.tracer.core.async.SofaTracerRunnable 默认完成了此操作,大家可以按照

  • 玩一些es6,遇到了一个问题,我不知道如何解决 在的内部,?目前我用bind解决了这个问题,但我想知道是否有一种更“合适”的ES6方法来实现这一点。

  • 问题内容: 我正在寻找此代码将输出: 但是我得到了: 我了解在B的上下文中,A.f1(String)中的“ this”是B的实例。我是否可以选择执行新的链B1()。f1(String)->(A’s)f1(String)->(A’s)f1(int,String)? 这是一个理论问题,实际上,解决方案显然是在A中实现f1(String)和f1(int,String)都将调用的私有函数。 谢谢你, 马克