Vb.net 如何通过并行计算获取类别列表信息?

Vb.net 如何通过并行计算获取类别列表信息?,vb.net,Vb.net,当我在VB.net中使用Parallel时,我遇到了一个问题。ForEach有一个实体列表,我收到了对象的IEnumerable(myClass)。 我希望在接收到的对象的每次迭代中获得一些信息,但当我在parallel.foreach中创建对象时,程序无法工作 这是我的代码: Friend Sub ChanceSomething(items As IEnumerable(Of Model.myClass)) Dim entity As New Model.myEntity Di

当我在VB.net中使用
Parallel时,我遇到了一个问题。ForEach
有一个实体列表,我收到了对象的
IEnumerable
myClass
)。 我希望在接收到的对象的每次迭代中获得一些信息,但当我在parallel.foreach中创建对象时,程序无法工作 这是我的代码:

Friend Sub ChanceSomething(items As IEnumerable(Of Model.myClass))
    Dim entity As New Model.myEntity
    Dim entities = Me.EntitiesList()        ' this is an IEnumerable(of myEntity), database query

    Parallel.ForEach(items, Sub(item as Model.myClass)
        ' select the entity with the same id's
        entity = entities.Where(Function(i) i.IdEntityClient = item.IdClient).FirstOrDefault()
        item.OwnerName = entity.OwnerName
        item.Id = entity.Id    

            End Sub)
End Sub
另一种方式是这样的:
parallel.ForEach
没有对象,我查阅了数据库两次(我不喜欢它,我认为它效率很低),我在同一个查询中获得了必要的数据。 这种方法可行,但我需要做一些类似于第一种方法的事情

Friend Sub ChanceSomething(items As IEnumerable(Of Model.myClass))

    Dim entities = Me.EntitiesList()        ' this is an IEnumerable(of myEntity)

    Parallel.ForEach(items, Sub(item as Model.myClass)
        item.OwnerName = entities.Where(Function(i) i.IdEntityClient = item.IdClient).Select(Function(result) result.OwnerName).FirstOrDefault()
        item.Id = entities.Where(Function(i) i.IdEntityClient = item.IdClient).Select(Function(result) result.Id).FirstOrDefault()    

            End Sub)
End Sub 

感谢您的帮助

我认为您遇到了问题,因为
实体
变量在
ForEach
循环的迭代之间共享。尝试更改
实体
变量的范围,以便每个
项都有一个单独的实例

Friend Sub ChanceSomething(items As IEnumerable(Of Model.myClass))
    Dim entities = Me.EntitiesList()        ' this is an IEnumerable(of myEntity), database query
    Parallel.ForEach(items, Sub(item as Model.myClass)
        ' select the entity with the same id's
        Dim entity As Model.myEntity = entities.Where(Function(i) i.IdEntityClient = item.IdClient).FirstOrDefault()
        item.OwnerName = entity.OwnerName
        item.Id = entity.Id    
    End Sub)
End Sub

我认为您遇到了问题,因为
实体
变量在
ForEach
循环的迭代之间共享。尝试更改
实体
变量的范围,以便每个
项都有一个单独的实例

Friend Sub ChanceSomething(items As IEnumerable(Of Model.myClass))
    Dim entities = Me.EntitiesList()        ' this is an IEnumerable(of myEntity), database query
    Parallel.ForEach(items, Sub(item as Model.myClass)
        ' select the entity with the same id's
        Dim entity As Model.myEntity = entities.Where(Function(i) i.IdEntityClient = item.IdClient).FirstOrDefault()
        item.OwnerName = entity.OwnerName
        item.Id = entity.Id    
    End Sub)
End Sub

“但是这个程序不起作用”——怎么会这样?在第一个代码块中,您正在为每个项重新使用
entity
变量,这似乎会导致问题-也许可以尝试在lambda中使用
Dim
将其命名?感谢您的注释标记,在第一个代码块中,我需要为entities对象命名。其中(Function(I)I.IdEntityClient=item.IdClient)。FirstOrDefault()然后把他放在变量“entity”中,然后我必须取一些atributes的值-这是怎么回事?在第一个代码块中,您正在为每个项目使用
entity
变量,这似乎会导致问题-也许可以尝试在lambda中使用
Dim
ming它?感谢您的注释标记,在第一个代码块中,我需要为实体的对象进行签名。其中(Function(I)I.IdEntityClient=item.IdClient).FirstOrDefault()并将其放入变量“entity”,然后我必须获取一些atributes的值。我这样做了,但结果是一样的,我会继续尝试,谢谢。我发现了问题,有必要评估变量实体,它不可能是“Nothing”,在某些情况下,这可能会发生,因为列表“entities”可能有与迭代中的对象不匹配的实体。如果entidad不是Nothing,则item.OwnerName=entity.OwnerName item.Id=entity.Id结束如果我这样做了,但结果是一样的,我会继续尝试,谢谢。我发现了问题,有必要计算变量实体,它不能是“Nothing”在某些情况下,这可能会发生,因为列表“实体”可能包含与迭代中的对象不匹配的实体。如果entidad不是空的,则item.OwnerName=entity.OwnerName item.Id=entity.Id结束,如果