asp.net - ASP.NET Core 等待 WebSocket.ReceiveAsync 阻止 IIS 关闭 dotnet.exe
问题描述
我有一个 ASP.NET Core 2.1 站点。它使用 WebSockets,特别是System.Net.WebSockets
. WebSocket 系统通常运行良好。但是当我尝试从 IIS 停止站点或从 IIS 停止应用程序池时,dotnet.exe 继续运行。我必须使用任务管理器结束该过程才能真正停止站点。
经过大量的试验和错误,我发现如果我停用处理 WebSockets 的代码,dotnet.exe 将正常停止。但是当我使用 WebSockets 时,站点不会在 IIS 请求时停止。使用 WebSockets 时,执行在此处等待:
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None).ConfigureAwait(false);
通常,我希望执行在这里等待。但由于应用程序正在停止,我需要这个ReceiveAsync
调用才能返回。我想知道我是否需要使用 a CancellationToken
,但要做到这一点,我当然需要使用正确 CancellationToken
的。
有人可以推荐如何处理这种情况,以便当站点或应用程序池从 IIS 停止时,等待操作可以正常结束?谢谢你。
解决方案
推荐阅读
- angular - 关闭终端后如何保持角度通用服务器运行
- react-native - 如何获取用户图库图片的地址?
- python - DIY HPC 集群以运行 Jupyter/Python 笔记本
- javascript - Bootstrap 3:移动视图多选“选择了0个元素”
- java - ANTLR 2 令牌流多路复用:为什么我的令牌出现故障?
- azure-devops - 在 Azure Devops 中运行顺序构建管道作为拉取请求分支策略的一部分
- java - 微调器值未显示正确值(改造)
- python - 在期权计算中正确指定无风险利率
- linux - 如何在 openhpi 安装期间解决 openssl 问题?
- python - 如何解决 Pycharm 中的 Visual Studio 问题