I need to pass a parameter to a Task (DotNet 4.0+) using the Task.Factory.StartNew syntax, but can't seem to figure out how to create an anonymous function in VB.Net (C# syntax is radically different and online converters do not work).
Here's the code (that looks like it would work, but most of the tasks have completed before the global variable can change in the iteration - so i need to pass that variable to the Task directly).
Public CurrentTradeDataURL As String = String.Empty
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim tskGet_BTCE As Task(Of Trades.TradeData)() = New Task(Of Trades.TradeData)(17) {}
For i As Integer = 0 To 17
CurrentTradeDataURL = My.Settings.All_BTCE_URIs(i)
tskGet_BTCE(i) = Task.Factory.StartNew(Of Trades.TradeData)(AddressOf GetTradeData)
Next
Task.WaitAll(tskGet_BTCE)
For x As Integer = 0 To 17
Dim li As New ListViewItem
li.Text = My.Settings.All_BTCE_Names(x)
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.high))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.low))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.avg))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.vol))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.vol_cur))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.last))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.buy))
li.SubItems.Add(ObjToStr(tskGet_BTCE(x).Result.sell))
li.SubItems.Add(ObjToDate(tskGet_BTCE(x).Result.updated).ToString)
li.SubItems.Add(ObjToDate(tskGet_BTCE(x).Result.server_time).ToString)
Me.ListView1.Items.Add(li)
Next
End Sub
Function GetTradeData() As Trades.TradeData
Dim retval As New Trades.TradeData
retval = CoreProcedures.GetHttpData(CurrentTradeDataURL, Nothing, CoreProcedures.MethodType.GET)
Return retval
End Function
I want to be change the function to look like
GetTradeData(CurrentTradeDataURL As String)
and pass the string to it directly. I understand that it's impossible to do w/o a Lambda expression, but have no idea how to do this in VB.Net.