キューから読み込んで(独自のスレッドで)1つのアイテムを処理し、キューが空になるまで繰り返すコードブロックがあります。なぜNullReferenceExceptionが発生するのか分かりません
public ActionResult GetOrdersAsync() {
int count = 0;
SyncDM sync = _common.StartSync();
while (sync != null && sync.SyncId != 0) {
int customerId;
bool result = int.TryParse(sync.Payload, out customerId);
if (result) {
Task.Run(() => GetOrders(sync.SyncId, customerId));
}
count++;
//Process the next Sync
sync = _common.StartSync();
}
return Json(new JsonModel {
Message = "Started " + count + " instances of GetOrders",
Success = count > 0
});
}
StartSync()は、キューからアイテムを削除するか、キューが空の場合はnullを返します。 GetOrders()はオブジェクトを処理します。
問題はこのコードでNullReferenceExceptionが発生することがあります。 Task.Run(()=> GetOrders(sync.SyncId、customerId));
デバッガでは、同期はnull
(例外の理由)ですが、customerIdには値があります。これは、同期に前の行の値があることを示しています。これは私を混乱させる、私はTask.Runとスレッドとは何かがあると思っているが、ローカルスコープの変数が自発的に値を変更している方法を理解していない。
)を終了し、それがなぜそれがこれをするのだろうか。 GetOrdersとGetOrdersAsync()を実際の非同期メソッドとして作成し、GetOrdersを待つことができますか?その後、次の同期を処理しようとする前に待機します。 – Dispersia