【发布时间】:2020-07-12 19:33:12
【问题描述】:
假设我有以下方法,以及调用它的代码:
public async Task<MyResult> PerformAction(string parameter)
{
if(parameter == "fail")
throw new Exception("You wanted me to fail.");
return await MyResult.Create(parameter);
}
var resultOne = await PerformAction("fail");
var resultTwo = await PerformAction("success");
这可以正常工作 - 但它会引发异常,从而导致异常的性能成本。
有没有办法向调用者指示任务失败,不抛出异常?
【问题讨论】:
-
您可以在
MyResult中包含bool IsSuccess属性。 -
您在
PerformAction上缺少async。 -
顺便说一句,例外是那些不应该指示操作结果(甚至是坏结果)但失败的东西。如果代码干净并正确实施,则应该尽可能少地抛出异常。在环境适合应用程序需求的完美场景中,不会抛出异常。
Exception收集堆栈跟踪,这是一个缓慢而繁重的操作。 -
@GuruStron - 谢谢,我编辑了帖子。
标签: c# asynchronous exception async-await