跨线程使用共享对象(Parallel.for)会引发对象引用错误

时间:2016-12-01 08:52:10

标签: c# .net vb.net multithreading parallel-processing

我使用Parallel.for来处理具有多个线程的批量Employees。

SqlHelper在类级别全局声明:

Private _dataAccess As SqlHelper
  

使用共享SqlHelper的方法:

Private Sub FillHashForBatch(ByVal threadcount As Integer, ByRef EmployeeHash As Hashtable)
    Dim Query As New StringBuilder
    Dim ImportEmpInfoReader As SqlDataReader

    Try

        Query=getQuery()

        ImportEmpInfoReader = _dataAccess.ExecuteReader(Query.ToString())

    Catch customException As ExceptionHandler

    Catch ex As Exception

    End Try
End Sub

应用程序在Sub FillHashForBatch()中抛出“对象引用未设置为对象的实例” 我使用的所有其他变量都是该方法的本地变量,除了_dataAccess是全局的。

  

我的问题是:

  1. 如果这些变量是本地的,则每个线程都有自己的变量实例。这是真的?如果是,他们可能会导致错误。
  2. 如果共享的SqlHelper导致错误,因为它共享,为什么它会抛出“对象引用”错误?是否有任何线程在使用后为空?
  3. 我只能在此方法中发现错误,而不是确切的行,因为它无法进行调试并且错误随机发生。不总是。我怎样才能找到确切的线?
  4. 最后但并非最不重要的是,什么是解决方案?

0 个答案:

没有答案