websocket + 异步task IIS发布 线程死循环

现在做的是用websocket建立链接,然后服务器推送消息到客户端(若数据发送变化,则推送)
下面是服务端代码,本地已测试

public void ProcessRequest(HttpContext context)
        {
            if (context.IsWebSocketRequest)
            {
                context.AcceptWebSocketRequest(WebSocketRequestHandler);
            } 
        }
public async Task WebSocketRequestHandler(AspNetWebSocketContext webSocketContext)
        {

            //获取当前的WebSocket对象
            System.Net.WebSockets.WebSocket webSocket = webSocketContext.WebSocket;

            Bll.All_Device_Connect bld = new Bll.All_Device_Connect();

            int first = 0;
            string ffs = "", ses = "";

            if (webSocket.State == WebSocketState.Open)
            {
                while(true)
                {
                    DataTable dt = bld.GetList();
                    if (first == 0)
                    {
                        ffs = DBHelper.JsonHelper.DatatableToJosn(dt);
                        ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                        buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(ffs));
                        //发送数据(到客户端)
                        await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                        first++;
                    }
                    else
                    {
                        ses = DBHelper.JsonHelper.DatatableToJosn(dt);
                        if (ffs != ses)//将此次结果与上一次结果进行比较
                        {
                            ffs = ses;//表字符串;若不同,则将该结果赋给ffs
                            ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                            buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(ffs));
                            //发送数据(到客户端)
                            await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                        }
                    }
                    if(webSocket.State!=WebSocketState.Open)
                    {
                        break;
                    }
                }

            }
        }

但是将其发布至IIS上,客户端页面刷新多次之后,iis worker process CPU占用率直线上升,导致websocket发不出任何消息,但是将iis worker process手动释放后又可以发出消息,不知道是不是while死循环的原因?(但是我需要while循环给它一直做判断)

好像微软自带websocket百度出来蛮多你这个问题,用fleck来实现websocket试试,接收信息也比微软的好用。。