0

サービスの開始時にデータをロードするスレッドがあります。このスレッドで、Parallel.Foreachを使用してデータセットを反復処理するメソッドを呼び出します。しかし、並列フォアラック内にある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

ロードされたイベントのリストにはnull要素が含まれていると思います。競合状態が原因である可能性があります。

于 2012-04-12T21:18:04.693 に答える