Ich habe einen Codeblock, der aus einer Warteschlange liest, ein Element verarbeitet (in seinem eigenen Thread) und dann wiederholt, bis die Warteschlange leer ist.Ich kann nicht verstehen, warum ich eine NullReferenceException erhalte
StartSync() entfernt entweder ein Element aus der Warteschlange oder gibt null zurück, wenn die Warteschlange leer ist. GetOrders() verarbeitet das Objekt. Das Problem ist, dass der Code manchmal eine NullReferenceException in dieser Zeile auslöst Task.Run (() => GetOrders (sync.SyncId, customerId))
Im Debugger ist Sync null
(Grund für Ausnahme), aber CustomerId hat einen Wert. Das sagt mir Sync hatte einen Wert auf der vorherigen Zeile. Das verwirrt mich, ich denke, es hat etwas mit Task.Run und Threading zu tun, aber ich verstehe nicht, wie eine lokal begrenzte Variable ihren Wert spontan ändert.
Wenn Ihr sync = _common.StartSync() vor Ihrem Sync-Objekt ungültig und der GetOrders() beendet ist, es macht Sinn, warum es das tun würde. Können Sie GetOrders und GetOrdersAsync() als tatsächliche Async-Methoden erstellen und dann auf GetOrders warten? Es wird dann warten, bevor Sie versuchen, die nächste Synchronisierung zu verarbeiten. – Dispersia