我如何用等待和异步制作2个无限循环



基本上,我有2个函数

Public Async Function finRepeatOrderingAsync() As Task
    basWindowFuncs.SetAllowUnsafeHeaderParsing20()
    Await mainLoopRepeat()
    Await secondaryLoop()
    Do
        Await mainLoopRepeat()
    Loop
End Function

基本上,我希望Mainlooprepeat和辅助循环再次重复,一次和一次。

这种安排的问题是次级卢普永不结束,等待的等待确保了Mainloop的DO循环。

我想要的是

做一次Mainlooprepeat。

做次级无限的时间。

当Secondaryloop连续运行Loop Mainlooprepeat时。

我应该怎么做?

辅助环看起来像这样

Private Async Function secondaryLoop() As Task
    Do
        CoinClass.assertCoinsNameOkay()
        Await CoinClass.checkMarketForAllCoinsAsync()
        CoinClass.assertCoinsNameOkay()
    Loop
End Function

我知道我可以这样做。

Public Async Function finRepeatOrderingAsync() As Task
    basWindowFuncs.SetAllowUnsafeHeaderParsing20()
    Await mainLoopRepeat()
    Dim secondaryLoop1 = secondaryLoop()
    Do
        Await mainLoopRepeat()
    Loop
    Await secondaryLoop1 'It'll never be reached but I think I got what I want.
End Function

但是感觉不优雅。

无论如何,我希望次级卢普和Mainloop只要程序运行。

我想知道是否有一种优雅的方法。

如果您只想运行两个无限循环,我认为最简单的方法是制作两种异步方法:

Private Async Function secondaryLoop() As Task
    Do
        CoinClass.assertCoinsNameOkay()
        Await CoinClass.checkMarketForAllCoinsAsync()
        CoinClass.assertCoinsNameOkay()
    Loop
End Function
Private Async Function mainLoop() As Task
    Do
        mainLoopRepeat()
    Loop
End Function

然后您可以将它们运行。

Public Async Function finRepeatOrderingAsync() As Task
    basWindowFuncs.SetAllowUnsafeHeaderParsing20()
    Await mainLoopRepeat()
    Await Task.WhenAll(mainLoop(), secondaryLoop())
End Function

最新更新