asp.net-core - 为什么 SignalR 建议使用 finally 在流中传播错误?
问题描述
SignalR文档关于流状态:
将逻辑包装在
try
...catch
语句中。Channel
在一个finally
块中完成。如果要处理错误,请将其捕获在catch
块内并将其写入finally
块中。
然后他们继续给出一个例子,通过这些卷积没有明显的收益。为什么是这样?捕获异常并从finally
块中完成通道与在块中完成然后和那里有什么区别catch
?
解决方案
可能集中编写器完成逻辑,即使只需要一次调用 - 如果需要,您可能希望在其中插入其他相关逻辑(例如日志记录)。
Exception localException = null;
try
{
// ...
}
catch (Exception ex)
{
localException = ex;
}
finally
{
writer.Complete(localException);
}
相对:
var completed = false;
try
{
// ...
}
catch (Exception ex)
{
writer.Complete(ex);
completed = true;
}
finally
{
if (!completed)
{
writer.Complete(null);
}
}
推荐阅读
- javascript - Babel 没有转译类(Webpack)
- ruby-on-rails - 在rails api中制作所需的参数
- c++ - 如何将 std::sample 与 QSet 一起使用?
- git - 通过硬重置回在合并中获得的提交来擦除合并提交?
- python - 从刮板的循环中创建数据框
- python - 在 python 3.7+ 中创建带有时区的数据时间?
- javascript - Firebase 翻译值/外键查找
- spss - 如何使用 COMPUTE 在 SPSS 中创建和计算一系列值?
- kubernetes - 通过busybox pod ping通时无法从nginx pod获得响应
- python - 为什么 KeyError 会出现在字符串中?