【发布时间】:2019-12-26 16:31:21
【问题描述】:
我有一个应用程序执行一些额外的工作,例如清理旧日志、发送通知等。如果一项工作失败,我不希望整个应用程序停止工作并且不执行剩下的工作。
例如,
await SendUsersBirthdayEmailsAsync(); // <-- if something fails while trying to send birthday emails here, I don't want the app to stop working and not clean logs and so on...
await DeleteOutdatedLogsAsync();
await SendSystemNotificationsAsync();
你会推荐我一起去吗?
【问题讨论】:
-
为什么不用try catch...
-
这是什么应用程序(控制台/wpf/winforms/...)?您所说的“使整个应用程序崩溃”是什么意思?如果生日邮件逻辑出现问题,你会怎么做?
-
@42LeapsOfFaith 你的意思是要捕获像
try { ... } catch { ... }这样的一般异常吗? -
@Fortega 这是一个由 Windows 任务计划程序每晚运行的控制台应用程序。如果生日邮件失败了,我只想记录它,然后让应用程序继续完成剩下的任务。
-
问题是,当您不知道可能会发生什么故障时,您无法知道程序是否仍处于适合执行任何进一步操作的状态 .不要试图在“无论如何”上当兵。捕获/处理您可以合理预期和处理的错误,否则最明智的做法是让程序崩溃和烧毁。除非您正在编写一个安全关键系统,否则无论如何您都不会使用 C#。