基本上,我有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。
我想知道是否有一种优雅的方法。
答案 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