如何使用Await和Async进行2次无限循环

时间:2019-05-03 15:35:07

标签: asynchronous async-await

基本上,我有2个功能

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

基本上,我希望mainloopRepeat和secondary loop一次又一次地重复。

这种安排的问题在于,secondaryLoop永远不会结束,并且等待确保了绝不会到达mainLoop的do循环。

我想要的是

执行一次mainloop重复一次。

secondaryLoop无限次。

secondaryLoop正在连续运行循环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

但是感觉并不优雅。

无论如何,只要程序运行,我都希望要重复secondaryLoop和mainloop。

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

1 个答案:

答案 0 :(得分:1)

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

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