Каков правильный синтаксис при использовании VB.Net Parallel.ForEach с ConcurrentDictionary?

У меня возникают трудности с получением правильного синтаксиса при использовании Parallel.ForEach и ConcurrentDictionary. Каков правильный синтаксис для Parallel.ForEach ниже?

Dim ServerList as New ConcurrentDictionary(Of Integer, Server)
Dim NetworkStatusList as New ConcurrentDictionary(Of Integer, NetworkStatus)

... (Fill the ServerList with several Server class objects)

'Determine if each server is online or offline.  Each call takes a while...
Parallel.ForEach(Of Server, ServerList, Sub(myServer)
        Dim myNetworkStatus as NetworkStatus = GetNetworkStatus(myServer)
        NetworkStatusList.TryAdd(myServer.ID, myNetworkStatus)
    End Sub

... (Output the list of server status to the console or whatever)

person user1532208    schedule 29.01.2015    source источник
comment
Проблема точно в строке Parallel.ForEach. Я включил другие определения для ясности, но, возможно, это только вызовет еще большую путаницу. ржу не могу   -  person user1532208    schedule 30.01.2015


Ответы (1)


Похоже, вы пытаетесь вызвать Parallel.ForEach(OF TSource)(IEnumerable(Of TSource), Action(Of TSource)), и в этом случае я считаю, что вам нужно что-то вроде этого:

'Determine if each server is online or offline.  Each call takes a while...
Parallel.ForEach(
    ServerList.Values,
    Sub(myServer)
        Dim myNetworkStatus as NetworkStatus = GetNetworkStatus(myServer)
        NetworkStatusList.TryAdd(myServer.ID, myNetworkStatus)
    End Sub
)

Вам нужно перебрать Values вашего ServerList словаря, которые имеют тип Server. Общий параметр TSource выводится из параметров, поэтому вам не нужно указывать его при вызове метода.

person Mark    schedule 29.01.2015