我有一个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
答案 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;
}
以及如何实现操作