Ich habe einen Thread, der Daten lädt, wenn ein Dienst gestartet wird. Ich rufe eine Methode in diesem Thread auf, die Parallel.Foreach verwendet, um eine Reihe von Daten zu iterieren. Aber die Linq-Abfrage, die ich in der parallelen Forerach habe, bekommt eine Objektreferenz, die nicht auf einen Instanzfehler gesetzt ist.Verwenden von Parallel.Foreach Inside Ein Thread
* Die gleiche Logik funktioniert, wenn ich die Parallel.Foreach entfernen oder wenn ich den Thread entfernen. * Selbst das Sperren der Liste hilft nicht. **
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();
}
---------------------------
}
Ich erhalte eine Ausnahme in der Linq-Abfrage innerhalb - 'e ist null und somit Objekt Referenzfehler'.
Jede Hilfe wird geschätzt.
Wo wird 'loadedEvents' in Ihrem Code festgelegt? Diese Variable ist null und ist der Täter, brauchen mehr Informationen darüber. – yamen
Sie ist bereits vor dem Start des Threads bereits ausgefüllt. Ich habe dies überprüft und es ist vollständig ausgefüllt und hat keine Nullwerte. In der Tat läuft derselbe Code gut, wenn ich ihn nicht von einem Thread aus anrufe. –
Nennen Sie es an genau der gleichen Stelle im Code, wenn Sie es außerhalb des Threads starten? – yamen