サービスの開始時にデータをロードするスレッドがあります。このスレッドでParallel.Foreachを使用して一連のデータを反復するメソッドを呼び出します。しかし、私は並列forerachの中にあるlinqクエリは、インスタンスエラーに設定されていないobjet参照を取得します。Parallel.Foreachをスレッド内で使用する
* 私も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であるので、参照エラーオブジェクトのを。
何か助けていただければ幸いです。
あなたのコードに 'loadedEvents'が設定されていますか?その変数はnullであり、原因はもっと詳しく知る必要があります。 – yamen
これは、スレッドが開始される前であっても事前に計算されています。私はこれを二重にチェックし、完全に入力され、ヌル値を持たない。実際には、スレッドから呼び出さないと同じコードが正常に動作します。 –
スレッドの外でコードを開始するときに、コード内の正確に同じ場所で呼び出しますか? – yamen