如果我用异步覆盖抽象的void方法会发生什么?

时间:2017-12-06 16:14:39

标签: c# async-await abstract

在标题中,我用abstract void覆盖override async void方法,但我不确定当通过基类调用方法时会发生什么,因为我无法放置{ {1}}那里。 线程是否会挂起,直到任务完成,或者表现得像await那样?

我已经通过其他答案发现我应该使用await作为返回值来使所有代码更清晰,但我想知道是否还存在行为差异。

为清晰起见,有些代码:

Task

1 个答案:

答案 0 :(得分:0)

由于该方法返回void,所以没有任何方法调用该方法(包括基类)可以await完成。您可以在await方法中自由使用async void,但是await对其没有任何调用。

基本上,您正在生成一个方法,如果其实现未被阻塞,该方法将立即返回,并且调用方法将在对重写方法的调用之后立即执行代码。自void以来,该方法及其副作用已经引起人们的注意,并且一发不可收拾。这意味着调用者不能依赖于该方法的完成,即不能依赖于该方法打算完成的任何操作。

注意:此答案是通过评论提供的。我为后代和answered标记而写。