首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SignalR实现等待接收任务

SignalR实现等待接收任务
EN

Stack Overflow用户
提问于 2022-03-20 05:29:59
回答 1查看 78关注 0票数 2

SignalR有两个不同的分支,我想知道为什么其中一个在等待receiving,另一个没有。原因是什么?

代码语言:javascript
复制
else
{
    // We're waiting on the websocket to close and there are 2 things it could be doing
    // 1. Waiting for websocket data
    // 2. Waiting on a flush to complete (backpressure being applied)

    _aborted = true;

    // Abort the websocket if we're stuck in a pending receive from the client
    socket.Abort();

    // Cancel any pending flush so that we can quit
    _application.Output.CancelPendingFlush();
}

vs

代码语言:javascript
复制
else
{
    Log.WaitingForClose(_logger);

    // We're waiting on the websocket to close and there are 2 things it could be doing
    // 1. Waiting for websocket data
    // 2. Waiting on a flush to complete (backpressure being applied)

    using (var delayCts = new CancellationTokenSource())
    {
        var resultTask = await Task.WhenAny(receiving, Task.Delay(_options.CloseTimeout, delayCts.Token));

        if (resultTask != receiving)
        {
            // Abort the websocket if we're stuck in a pending receive from the client
            _aborted = true;

            socket.Abort();

            // Cancel any pending flush so that we can quit
            _application.Output.CancelPendingFlush();
        }
        else
        {
            delayCts.Cancel();
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-11 07:12:48

他们在等待两种不同的东西:

  1. 有一个任务从websocket读取并写入应用程序管道
  2. 有一个从应用程序管道读取并写入websocket的任务。

第一分支处理1,第二分支处理2。

希望这些评论是解释性的。它们详细说明了任何一方可能被卡住的情况,以及我们因此而中止/取消的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71544293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档