C#从异常句柄返回一些东西

ant*_*009 1 c# exception-handling

我的类中有以下代码.此类的目的是从Web服务器获取余额.万一获得平衡出现问题.我会处理一个例外.但是,这一切都很容易.但是我想知道在我的捕获声明中我会返回什么.

我看到的大多数示例只是使用以下命令写入控制台:

Console.WriteLine(ex.Message);
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但在实际应用中,大多数开发人员做了什么?

 //Download only when the webclient is not busy.
        if (!wc.IsBusy)
        { 
            // Sleep for 1/2 second to give the server time to update the balance.
            System.Threading.Thread.Sleep(500);

            try
            {
                // Download the current balance.
                wc.DownloadStringAsync(new Uri(strURL));
            }
            catch (WebException ex)
            {
                Console.Write("GetBalance(): " + ex.Message);
            }
        }
        else
        {
            Console.Write("Busy please try again");
        }
Run Code Online (Sandbox Code Playgroud)

我此时的功能返回无效.而且我只是想知道如果webclient忙的话还会有什么回报呢?

非常感谢任何建议,

Dan*_*ner 14

如果你无法处理它,请不要捕获异常.如果只返回一些值,则调用方法必须检查值是实际结果还是仅指示异常.现在这种方法必须决定做什么和返回.并且调用此方法的方法.而方法......

因此,只需让异常在堆栈中冒泡并将其捕获到可以处理它的位置.也许直接在用户界面下方,然后显示一个消息框,询问用户是否要重试或显示如何解决问题的信息.如果您没有用户界面,请将其捕获到可以解决问题并重试的位置.如果是临时问题,请在合理的级别重试整个任务,直到呼叫成功为止.

如果要记录某些内容,请使用以下模式记录异常并重新抛出异常.

try
{
   DoStuff();
}
catch (Exception exception)
{
   Log(exception.ToString());

   throw;
}
Run Code Online (Sandbox Code Playgroud)

请注意它是否throw;存在throw exception;.如果执行稍后操作,则会丢失原始堆栈跟踪.如果您可以推断出有关异常原因的更多详细信息,则应将捕获的异常包含在一个更有意义的异常中并附加其他信息.

try
{
   DoStuff();
}
catch (SpecificMeaninglessException exception)
{
   Log(exception.ToString());

   throw new MeaningfulException("Details about the error.", exception);
}
catch (Exception exception)
{
   Log(exception.ToString());

   throw;
}
Run Code Online (Sandbox Code Playgroud)