You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 8中无法使用BackgroundSocketProcessor,疑缺类库求解决

问题分析与解决

BackgroundSocketProcessor并非ASP.NET Core官方WebSocket模块的内置类型,你遇到的问题是因为这个类是教程中自定义的辅助类,不属于框架自带的类库范畴,因此需要你自行实现该类,或者确认教程中是否提供了对应的代码实现。

你可以参考以下示例实现BackgroundSocketProcessor,用于管理WebSocket连接并后台处理消息:

public static class BackgroundSocketProcessor
{
    private static readonly HashSet<(WebSocket Socket, TaskCompletionSource<object> Tcs)> _activeSockets = new();
    private static readonly SemaphoreSlim _semaphore = new(1, 1);

    public static async Task AddSocket(WebSocket socket, TaskCompletionSource<object> completionSource)
    {
        await _semaphore.WaitAsync();
        try
        {
            _activeSockets.Add((socket, completionSource));
        }
        finally
        {
            _semaphore.Release();
        }

        // 启动独立后台任务处理当前Socket的消息循环
        _ = HandleSocketCommunicationAsync(socket, completionSource);
    }

    private static async Task HandleSocketCommunicationAsync(WebSocket socket, TaskCompletionSource<object> completionSource)
    {
        var receiveBuffer = new byte[4096];
        try
        {
            while (socket.State == WebSocketState.Open)
            {
                var receiveResult = await socket.ReceiveAsync(
                    new ArraySegment<byte>(receiveBuffer), 
                    CancellationToken.None);

                if (receiveResult.MessageType == WebSocketMessageType.Close)
                {
                    await socket.CloseAsync(
                        receiveResult.CloseStatus.Value, 
                        receiveResult.CloseStatusDescription, 
                        CancellationToken.None);
                    break;
                }

                // 在这里添加你的消息处理逻辑,比如解析消息、广播到其他连接等
            }
        }
        catch (Exception ex)
        {
            // 根据需求添加异常处理逻辑,比如日志记录
        }
        finally
        {
            // 从活跃连接集合中移除当前Socket
            await _semaphore.WaitAsync();
            try
            {
                _activeSockets.Remove((socket, completionSource));
            }
            finally
            {
                _semaphore.Release();
            }
            // 标记Socket处理完成
            completionSource.SetResult(null);
        }
    }
}

将上述代码添加到你的项目中后,原Program.cs中的代码即可正常调用BackgroundSocketProcessor.AddSocket方法。

内容的提问来源于stack exchange,提问作者nhất lệ hồng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:35:00