private async Task ProcessIpsPendingItem(string ipsEventId, string[] itemList) { var statAdapter = new Adapters.Oal.dbo_status_code_event_newAdapter(); var statPendingPolly = await Policy.Handle <SqlException>(e => e.IsTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(async() => await statAdapter.LoadOneAsync(ipsEventId)); if (null != statPendingPolly.FinalException) { throw new Exception("Process Stat Pending Polly Error", statPendingPolly.FinalException); } var stat = statPendingPolly.Result; var statItems = new List <Adapters.Oal.dbo_status_code_event_new>(); var ipsAdapter = new Adapters.Oal.dbo_ips_importAdapter(); var ipsItems = new List <Adapters.Oal.dbo_ips_import>(); foreach (var item in itemList) { if (IsIpsImportItem(item)) { var ips = await CreateStatIpsImport(stat, item); ipsItems.Add(ips); } } foreach (var item in ipsItems) { var pr = Policy.Handle <SqlException>(e => e.IsDeadlockOrTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(() => ipsAdapter.InsertAsync(item)); var result = await pr; if (result.FinalException != null) { throw result.FinalException; // send to dead letter queue } System.Diagnostics.Debug.Assert(result.Result > 0, "Should be at least 1 row"); } }
private async Task ProcessDeliveryPendingItem(string deliEventId, string[] itemList) { var deliAdapter = new Adapters.Oal.dbo_delivery_event_newAdapter(); var ipsAdapter = new Adapters.Oal.dbo_ips_importAdapter(); var deliPendingPolly = await Policy.Handle <SqlException>(e => e.IsTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(async() => await deliAdapter.LoadOneAsync(deliEventId)); if (null != deliPendingPolly.FinalException) { throw new Exception("Process Deli Pending Polly Error", deliPendingPolly.FinalException); } var deli = deliPendingPolly.Result; var deliItems = new List <Adapters.Oal.dbo_delivery_event_new>(); var ipsItems = new List <Adapters.Oal.dbo_ips_import>(); foreach (var item in itemList) { var console = IsConsole(item); var child = deli.Clone(); child.id = GenerateId(34); child.consignment_no = item; child.data_flag = "1"; child.item_type_code = console ? "02" : "01"; deliItems.Add(child); if (IsIpsImportItem(item)) { var ips = await CreateDeliIpsImport(deli, item); ipsItems.Add(ips); } } foreach (var item in deliItems) { var pr = Policy.Handle <SqlException>(e => e.IsDeadlockOrTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(() => deliAdapter.InsertAsync(item)); var result = await pr; if (result.FinalException != null) { throw result.FinalException; // send to dead letter queue } System.Diagnostics.Debug.Assert(result.Result > 0, "Should be at least 1 row"); } foreach (var item in ipsItems) { var pr = Policy.Handle <SqlException>(e => e.IsDeadlockOrTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(() => ipsAdapter.InsertAsync(item)); var result = await pr; if (result.FinalException != null) { throw result.FinalException; // send to dead letter queue } System.Diagnostics.Debug.Assert(result.Result > 0, "Should be at least 1 row"); } }