stop/close SignalR 流是否需要 CancelationToken.Cancel()?

Is it necessary to stop/close SignalR stream with CancelationToken.Cancel()?

我担心如何正确 stop/close SignalR 流。它是服务器到客户端的流式传输。

我将尝试解释流媒体的背景。我们有连接到 IP 摄像机并用它打开流的网络服务。在服务的后期,我们对图像(帧)进行生物识别处理,然后将经过生物识别处理的图像流式传输到连接到 SignalR 流的客户端。连接的客户端不多,最多2、3、4个。

所以,我担心的是,如果其中一个客户端想要与流断开连接,它是否需要调用 CancelationToken.Cancel() 或者我们可以让他从服务器上的 while(true) 循环中中断?当该客户端与流断开连接时,流应继续工作,因为其他客户端仍处于连接状态。

关于客户端如何从 while(true) 循环中断的一些简短示例。

public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
    while(true)
    {
        if(client.WantToLeaveStream)
        {
            break;
        }
    }

...

public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
    while(true)
    {
        if(cancellationToken.IsCancellationRequested)
        {
            cancellationToken.ThrowIfCancellationRequested();
        }
    }

...

我浏览了 Microsoft 站点 SignalR stream 上的文档,他们说我们应该使用 CancelationToken 来停止流,但我也尝试通过离开 while(true) 循环和没有什么不好的事情发生,流就停止了。那样行吗? :/

打破循环就好了。该方法是生成流项的方法,或者更具体地说,是向 SignalR 提供流项的方法,因此如果您中断循环,将从 SignalR 的角度停止生成项。文档提到了令牌,因为客户端可以断开连接或取消监听流,并且您的服务器可能希望在这种情况下停止做额外的工作。