没有lambda怎么办?

时间:2019-04-28 17:08:20

标签: vb.net lambda continuewith

Public Shared Async Function getMarketDetailFromAllExchangesAsync() As Task
    Dim taskList = New List(Of Task)
    Dim starttime = jsonHelper.currentTimeStamp
    LogEvents("Start Getting Market Detail of All")
    For Each account In uniqueAccounts().Values
        Dim newtask = account.getMarketInfoAsync().ContinueWith(Sub() account.LogFinishTask("GetMarketDetail", starttime))
        taskList.Add(newtask)
        'newtask.ContinueWith(Sub() LogEvents(account.ToString))
    Next
    Await Task.WhenAll(taskList.ToArray)
    Dim b = 1
End Function

是否可以用addressOf代替.ContinueWith(Sub()account.LogFinishTask(“ GetMarketDetail”,starttime))?

如何?

1 个答案:

答案 0 :(得分:1)

您需要创建一个满足任何ContinueWith重载的方法。
在您的特定情况下,它应满足Action(Of Task)的签名。

但是由于在ConitnuesWith中您正在使用account实例,因此您将无法将AddressOf与执行循环的类的方法一起使用。

作为解决方法,您可以在account类中创建所需的方法

Public Class Account
    Public Sub LogFinishedMarketDetail(task As Task)
        Dim starttime = jsonHelper.currentTimeStamp
        Me.LogFinishTask("GetMarketDetail, starttime")
    End Sub
End Class

用法

For Each account In uniqueAccounts().Values
    Dim newtask = 
        account.getMarketInfoAsync().ContinueWith(AddressOf account.LogFinishedMarketDetail)
    taskList.Add(newtask)
Next

建议-将Option Strict设置为On-通过在编译时而不是运行时显示可能的错误来节省开发人员的时间。