Exemplo n.º 1
0
        private async Task ProcessSipPendingItem(string sipEventId, string[] itemList)
        {
            var sipAdapter      = new Adapters.Oal.dbo_sip_event_newAdapter();
            var sipPendingPolly = await Policy.Handle <SqlException>(e => e.IsTimeout())
                                  .WaitAndRetryAsync(RetryCount, WaitInterval)
                                  .ExecuteAndCaptureAsync(async() => await sipAdapter.LoadOneAsync(sipEventId));

            if (null != sipPendingPolly.FinalException)
            {
                throw new Exception("Process Sip Pending Polly Error", sipPendingPolly.FinalException);
            }

            var sip  = sipPendingPolly.Result;
            var sips = new List <Adapters.Oal.dbo_sip_event_new>();

            foreach (var item in itemList)
            {
                var console = IsConsole(item);
                var child   = sip.Clone();
                child.id             = GenerateId(34);
                child.consignment_no = item;
                child.data_flag      = "1";
                child.item_type_code = console ? "02" : "01";
                if (child.dateCreatedOALDateField.HasValue && child.dateCreatedOALDateField.Value < new DateTime(1753, 1, 1))
                {
                    child.dateCreatedOALDateField = null;
                }
                sips.Add(child);
            }
            foreach (var item in sips)
            {
                var pr = Policy.Handle <SqlException>(e => e.IsDeadlockOrTimeout())
                         .WaitAndRetryAsync(RetryCount, WaitInterval)
                         .ExecuteAndCaptureAsync(() => sipAdapter.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");
            }
        }