gpt4 book ai didi

c# - 后台 worker 异常处理

转载 作者:太空狗 更新时间:2023-10-29 17:33:13 25 4
gpt4 key购买 nike

我对如何处理异常有点困惑。

我有一个后台工作线程运行一些长时间运行的进程。我的理解是,如果后台工作线程发生异常,代码仍将在 RunWorkerCompleted 方法处结束。

void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{

if (e.Error != null)
throw e.Error;

如果是这种情况,在 bgWorker.RunWorkerAsync() 周围放置一个 try catch block 是否有任何意义;打电话,我想不是吧?

我想重新抛出在 RunWorkerCompleted 方法中捕获的异常,如何在不丢失堆栈跟踪的情况下执行此操作 - 我上面的内容是否正确?我读到你在重新抛出异常时应该只使用“throw”?

最佳答案

我建议您创建一些特定于业务的异常,它描述了您在后台执行的操作。并将此异常与原始异常一起作为内部异常抛出:

private void bgWorker_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
throw new BusinessSpecificException("Operation failed", e.Error);
// ...
}

因此原始异常及其堆栈跟踪将可用,并且您将抛出更具描述性的异常。

注意 - 如果您不想创建新的异常类,您可以使用现有的 ApplicationExceptionException .但它的信息量不大,如果你要在某个地方捕获它,那么你将无法只捕获这个特定的异常

关于c# - 后台 worker 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com