我认为在Rust中,panic!
会停止所有的操作,但是如果我在Iron路由处理函数中使用panic!
,它不会停止整个服务器。相反,它只会显示错误信息。
这是panic!
的“正常”行为吗?
我不会在此处发布我的实际代码,因为我认为这没有用处,但如果需要,我可以添加它。
我认为在Rust中,
panic!
会停止一切。
并非如此:对于单线程程序,panic!
仅停止¹当前线程,从而停止整个程序。如果您生成另一个线程,则父线程可以检测到子线程是否发生了崩溃加入。
Iron使用许多线程来并行处理多个请求。 显然,它只是忽略子线程中的崩溃...
正如DK和Vladimir Matveev在评论中提到的那样,这并不是那么简单。当恐慌被"抛出"时,可能会发生多种情况。默认情况下,应用程序开始展开(向下爬取堆栈),直到堆栈的"末尾"或达到catch_unwind
。在前一种情况下,线程被杀死;在后一种情况下,由用户决定发生什么。您还可以配置您的构建,使panic!
调用abort
。
panic!
类似于其他语言中的异常,但有两个主要区别:
panic!
:进程立即中止catch_unwind
:处理程序决定要做什么
catch_unwind
调用中。或者,它也可以中止整个进程。 - DK.