c# - 我可以将错误处理合并到我的 API 中吗?

标签 c# api error-handling

我有一个 API 循环遍历地址并清理它们。我正在使用大约 40k 个地址对其进行测试,并且需要几个小时才能遍历数千个地址。有时它会引发错误并关闭应用程序,我必须重新启动它。有没有办法可以将错误处理写入catch,如果有错误,它只会记录它,但继续运行应用程序?
我正在使用 VS 2019、C#、Windows 窗体。

public class Elements
    {
        public string streetaddress1 { get; set; }
        public string streetaddress2 { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string zip { get; set; }
        public string country { get; set; }
    }

   void Output(string strDebugText)
        {
            try
            {
                System.Diagnostics.Debug.Write(strDebugText + Environment.NewLine);
                txtResponse.Text = txtResponse.Text + strDebugText + Environment.NewLine;
                txtResponse.SelectionStart = txtResponse.TextLength;
                txtResponse.ScrollToCaret();
            
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
            }
        }

private void btnMultiple_Click(object sender, EventArgs e)
    {

        //Loads address that need to be cleansed 
        string filePath = @"C:data.csv";
        List<Elements> addresses = new List<Elements>();
        List<string> lines = File.ReadAllLines(filePath).ToList();
        

        foreach (var line in lines)
        {
            string[] entries = line.Split(',');

            Elements newElement = new Elements();

            newElement.streetaddress1 = entries[0];
            newElement.streetaddress2 = entries[1];
            newElement.city = entries[2];
            newElement.state = entries[3];
            newElement.zip = entries[4];

   addresses.Add(newElement);
                 
        }

foreach (var Element in addresses)
        {
            Output($"{ Element.streetaddress1 } { Element.city} { Element.state } { Element.zip } " +
                $"{ Element.country }");
            var venvMulti = new AreaLookup.VertexEnvelope();
            var clientMulti = new AreaLookup.LookupTaxAreasWS90Client();
            var reqMulti = new AreaLookup.TaxAreaRequestType();
            var reqresMulti = new AreaLookup.TaxAreaResultType();
            var resMulti = new AreaLookup.TaxAreaResponseType();
            string inputXMLMulti;
            string outputXMLMulti;
            var TALMulti = new AreaLookup.TaxAreaLookupType();
            var TALasofDateMulti = new DateTime();
            var resTypeMulti = new AreaLookup.TaxAreaLookupResultType();
            var postalMulti = new AreaLookup.PostalAddressType();
            string StrNoteMulti = "";
            int i, y;
            var x = default(int);

            postalMulti.MainDivision = Element.state;
            postalMulti.City = Element.city;
            postalMulti.PostalCode = Element.zip;
            postalMulti.StreetAddress1 = Element.streetaddress1;
            TALasofDateMulti = Conversions.ToDate("2020-12-11");
            TALMulti.asOfDate = TALasofDateMulti;
            TALMulti.Item = postalMulti;
            reqMulti.TaxAreaLookup = TALMulti;
            var LITMulti = new AreaLookup.LoginType();
            venvMulti.Login = new AreaLookup.LoginType();
            venvMulti.Login.UserName = "****";
            venvMulti.Login.Password = "****";
            venvMulti.Item = reqMulti;

            inputXMLMulti = (string)SerializeObjectToString(venvMulti);
            Output(inputXMLMulti);

            try
            {
                clientMulti.LookupTaxAreas90(ref venvMulti);
                resMulti = (AreaLookup.TaxAreaResponseType)venvMulti.Item;
                outputXMLMulti = (string)SerializeObjectToString(venvMulti);
                Output(outputXMLMulti);
               

                var loopTo = resMulti.TaxAreaResult.Length - 1;
                                      
                
            }
            catch (NullReferenceException)
            {
                Console.WriteLine("Null");
            }
            
            reqMulti = default;
            reqresMulti = default;
            resMulti = default;

            void debugOutputCleansedMulti(string strDebugTextCleansedMulti)
            {
                try
                {
                    System.Diagnostics.Debug.Write(strDebugTextCleansedMulti + Environment.NewLine);
                    txtCleansed.Text = txtCleansed.Text + strDebugTextCleansedMulti + Environment.NewLine;
                    txtCleansed.SelectionStart = txtCleansed.TextLength;
                    txtCleansed.ScrollToCaret();
                   
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
                }
            }

            debugOutputCleansedMulti("Address Cleanse Started: ");
            var venvCleansedMulti = new AreaLookup.VertexEnvelope();
            var clientCleansedMulti = new AreaLookup.LookupTaxAreasWS90Client();
            var reqCleansedMulti = new AreaLookup.TaxAreaRequestType();
            var reqresCleansedMulti = new AreaLookup.TaxAreaResultType();
            var resCleansedMulti = new AreaLookup.TaxAreaResponseType();
            string inputXMLCleansedMulti;
            string outputXMLCleansedMulti;
            var TALCleansedMulti = new AreaLookup.TaxAreaLookupType();
            var TALasofDateCleansedMulti = new DateTime();
            var resTypeCleansedMulti = new AreaLookup.TaxAreaLookupResultType();
            var postalCleansedMulti = new AreaLookup.PostalAddressType();
            string StrNoteCleansedMulti = "";
            int a, b;
            var c = default(int);

            postalCleansedMulti.MainDivision = Element.state;
            postalCleansedMulti.City = Element.city;
            postalCleansedMulti.PostalCode = Element.zip;
            postalCleansedMulti.StreetAddress1 = Element.streetaddress1;
            TALasofDateCleansedMulti = Conversions.ToDate("2020-12-11");
            TALCleansedMulti.asOfDate = TALasofDateCleansedMulti;
            TALCleansedMulti.Item = postalCleansedMulti;
            reqCleansedMulti.TaxAreaLookup = TALCleansedMulti;
            var LITCleansedMulti = new AreaLookup.LoginType();
            venvCleansedMulti.Login = new AreaLookup.LoginType();
            venvCleansedMulti.Login.UserName = "****";
            venvCleansedMulti.Login.Password = "****";
            venvCleansedMulti.Item = reqCleansedMulti;
            int j = 1;

            //inputXMLCleansed = resCleansed.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + " - " + resCleansed.TaxAreaResult[0].PostalAddress[0].PostalCode + " - " + resCleansed.TaxAreaResult[0].confidenceIndicator;
            //debugOutputCleansed(inputXMLCleansed);

            try
            {
                clientCleansedMulti.LookupTaxAreas90(ref venvCleansedMulti);
                resCleansedMulti = (AreaLookup.TaxAreaResponseType)venvCleansedMulti.Item;
                debugOutputCleansedMulti(resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + " | Street Address 1" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress2 + " | Street Address 2" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].SubDivision + " | County" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].City + " | City" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].PostalCode + " | Zip Code" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].MainDivision + " | State" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].confidenceIndicator + " | Confidence Indicator");

                
                
                string pathCleansed = @"C:\dev\data\data.csv";
                string[] createText = { 
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress2 + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].City + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].MainDivision + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].PostalCode + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].Country + "," + 
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].SubDivision + "," +                      
                        resCleansedMulti.TaxAreaResult[0].confidenceIndicator
                     };
                File.AppendAllLines(pathCleansed, createText, System.Text.Encoding.UTF8);

                txtCounter.Text = j.ToString();
                j++;

                var loopTo = resCleansedMulti.TaxAreaResult.Length - 1;
                for (b = 0; b <= loopTo; b++)
                {
                    if (c == 0)
                    {
                        StrNoteCleansedMulti = resCleansedMulti.TaxAreaResult[b].PostalAddress[0].StreetAddress1 + " - " + resCleansedMulti.TaxAreaResult[b].confidenceIndicator; c = 1;

                        
                    }
                    else
                    {
                        StrNoteCleansedMulti += ", " + resCleansedMulti.TaxAreaResult[b].taxAreaId + " - " + resMulti.TaxAreaResult[b].confidenceIndicator;
                    }

                    
                }

                


            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
            }
            reqCleansedMulti = default;
            reqresCleansedMulti = default;
            resCleansedMulti = default;

        }

    }

最佳答案

本质上,您需要一种方法来保存正在进行的工作。一种模式是加载文件并将其存储在数据库中,然后在处理每一行时标记已处理的项目。如果你这样做,我会将代码拆分为不同的模块,导入文件、处理文件和导出结果。
另一种更简单的方法可能是在处理结果时写出结果,并记录输入文件中的行号。然后,如果您必须重新启动,请找到您输出的最后一行并使用它来跳过重新处理输入文件中的项目

关于c# - 我可以将错误处理合并到我的 API 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65668718/

相关文章:

java - Try-Catch 异常处理不提供正确的响应

c# - 你能为一个类使用类似数组的构造函数吗

javascript - 覆盖YouTube的恢复播放功能?

ruby - Sinatra 中的全局救援和日志记录异常

ios - 如何使用 node.js 保护我的 api,并且只有我的应用程序正在使用此 api

java - 用于商家网站的 api,用于为我们的用户提供交易信用

python-3.x - Python3 IndentationError : expected an indented block - should not throw this

c# - 文件已存在时无法创建文件

c# - Gridview Item has already been added 错误

c# - 错误 - 无法加载具有固定名称 'System.Data.SQLite.EF6' 的 ADO.NET 提供程序