首页 > 解决方案 > 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 停止时,等待操作可以正常结束?谢谢你。

标签: asp.netiisasp.net-corewebsocketasync-await

解决方案


推荐阅读