For Each account In _accounts11
Dim newtask = account.readbalancesAsync()
newtask = newtask.ContinueWith(Sub() account.LogFinishTask("Getting Balances", starttime))
newtask = newtask.ContinueWith(Async Function() account.getOrdersAsync())
newtask = newtask.ContinueWith(Sub() account.LogFinishTask("Getting Orders", starttime))
tasklist.Add(newtask)
Next
Await Task.WhenAll(tasklist.ToArray)
Dim b = 1
基本上,对于每个帐户,我想做account.readbalancesAsync,之后,我想做account.getOrdersAsync()
我离开代码newtask.ContinueWith(Sub() account.LogFinishTask("Getting Balances", starttime))
表明我知道ContinueWith是如何工作的。但是,在那之后,我需要继续执行另一项任务。
我该怎么办?
我想要做的就是这样
For Each account In _accounts11
await account.readbalancesAsync()
account.LogFinishTask("Getting Balances", starttime)
await account.getOrdersAsync())
account.LogFinishTask("Getting Orders", starttime)
tasklist.Add(newtask)
Next
显然,如果我这样做,那么一个帐户必须等待另一个帐户完成。我希望所有帐户并行运行。
或者让我们来看看这段代码
dim response1 = await client.GetAsync("http://example.com/");
dim response2 = await client.GetAsync("http://stackoverflow.com/");
说我这样做
dim newtask = client.GetAsync("http://example.com/").continueWith(....)
await newtask
我该怎么办......
我认为你错误地在某处错了。如果你需要在彼此之后运行这四个语句,但不干扰循环,那么你需要做的就是创建一个执行多行/块lambda表达式的任务。
例如:
For Each account In _accounts11
Dim newtask = Task.Run( 'Start a new task.
Async Function() 'Multiline lambda expression.
Await account.readbalancesAsync()
account.LogFinishTask("Getting Balances", starttime)
Await account.getOrdersAsync()
account.LogFinishTask("Getting Orders", starttime)
End Function
) 'End of Task.Run()
tasklist.Add(newtask)
Next
我只想在VisualVincent的答案中添加一些内容。我还是喜欢用continueWith做这件事
Private Async Function readBalancesAndOrderForEachAccount(starttime As Long) As Task
Await readbalancesAsync()
LogFinishTask("Getting Balances", starttime)
Await getOrdersAsync()
LogFinishTask("Getting Orders", starttime)
End Function
Public Shared Async Function getMarketDetailFromAllExchangesAsync2() As Task
Dim CurrentMethod = MethodBase.GetCurrentMethod().Name
Dim tasklist = New List(Of Task)
Dim starttime = jsonHelper.currentTimeStamp
...
For Each account In _accounts11
Dim newtask = account.readBalancesAndOrderForEachAccount(starttime)
tasklist.Add(newtask)
Next
Await Task.WhenAll(tasklist.ToArray)
Dim b = 1
...
End Function
这看起来很有效。但是,我想了解如何使用continueWith这样做,因为我很好奇。