如何从另一个类退出Async函数

时间:2017-08-11 11:33:23

标签: vb.net winforms

我有一个Async方法,在关闭其用户控件后不会立即结束。因此,当我关闭并快速重新打开它时,我的用户控件会出错。我怎么能从另一个类退出Async函数。那可能吗?

Public Class Main       
    Private Sub mainfucn()
        'exit otherfunc
    End Sub
End Class

Public Class Other
    Public Async Function otherfunc() As Task
        ' some code
    End Sub
End Class

1 个答案:

答案 0 :(得分:2)

嗯,你可以自己实施自己的取消系统。例如,执行类似操作的最简单方法可能是使用某种取消标记属性,如下所示:

Public Class Main       
    Private _other As New Other()

    Private Sub MainFunc()
        other.Cancelled = True
    End Sub
End Class

Public Class Other
    Public Property Cancelled As Boolean    ' Yes, I know I'm not British, but the American spelling of "Canceled" is phonetically stupid.  But, then again, so is the spelling of "British", so...

    Public Async Function OtherFunc() As Task
        Cancelled = False
        While Not Cancelled
            ' Some code
        End While
    End Sub
End Class

然而,这将是非常可怕的,所以我不推荐它。可怕的两个主要原因是因为, One ,它假定只有一种Async方法,并且只有一种CancellationToken方法一次运行它的调用。而且 Two ,它与.NET的标准异步取消模式不一致。

我强烈建议您不要尝试使用自己的(反)模式,而应该在Async函数中添加CancellationToken参数。但是,在方法中实现它的方式都取决于它异步执行的操作以及它是如何执行的。因此,如何实现这一目标,就不可能给你一个好的榜样。我能说的最好的事情是,你使用CancellationToken走在正确的轨道上,所以你应该继续沿着这条路走下去。如果在进行更多研究后,您无法使其正常工作,那么我建议您发布更具体的问题,了解如何在您的方法正在进行的环境中实现.link { position: absolute; bottom: 0; } 以及如何实现操作