0

我有一个线程在服务启动时加载数据。我在这个线程中调用了一个方法,该方法使用 Parallel.Foreach 来迭代一组数据。但是我在并行 forerach 中的 linq 查询获得了一个未设置为实例错误的对象引用。

*如果我删除 Parallel.Foreach 或删除线程,则相同的逻辑有效。*即使锁定列表也无济于事。**

    loadingThread = new Thread(new ThreadStart(PreloadData));
                loadingThread.IsBackground = true;
                loadingThread.Start();
---------------------------------------

    public static void PreloadData()
    {
     Parallel.ForEach(loadedIDs.Keys, indexDefId =>
                    {
                        List<FixingEvent> lst = null;
                        lock (loadedEvents)
                        {
                            lst = (from e in loadedEvents where e.DIVACode.Equals(indexDefId) select e).ToList();
                        }

---------------------------
    }

我在里面的 linq 查询中遇到异常 - ' e 为 null,因此对象引用错误'

任何帮助表示赞赏。

4

2 回答 2

1

您不应该锁定loadedEvents对象。根据msdn

最佳实践是定义一个私有对象来锁定,或者一个私有静态对象变量来保护所有实例共有的数据。

你不需要锁定你正在访问的对象——你只需要一个对象来锁定。

于 2012-04-12T22:59:05.497 回答
0

我猜加载事件列表包含空元素。也许是由于比赛条件。

于 2012-04-12T21:18:04.693 回答