首页 > 解决方案 > 为什么 SignalR 建议使用 finally 在流中传播错误?

问题描述

SignalR文档关于流状态:

将逻辑包装在try...catch语句中。Channel在一个finally块中完成。如果要处理错误,请将其捕获在catch块内并将其写入finally块中。

然后他们继续给出一个例子,通过这些卷积没有明显的收益。为什么是这样?捕获异常并从finally块中完成通道与在块中完成然后和那里有什么区别catch

标签: asp.net-coresignalr

解决方案


可能集中编写器完成逻辑,即使只需要一次调用 - 如果需要,您可能希望在其中插入其他相关逻辑(例如日志记录)。

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);
    }
}

推荐阅读