小编Anc*_*tax的帖子

对并发集合线程的linq操作是否安全?

例如以下代码线程安全:

ConcurrentQueue<Guid> _queue = new ConcurrentQueue<Guid>();
while(true)
{
for(int y = 0; y < 3; y++)
{
    if(y % 3 == 0)
    {
    System.Threading.Tasks.Task.Run(() => _queue.Enqueue(Guid.NewGuid()));
    }
    else if (y % 3 == 1)
    {
    Guid x;
    System.Threading.Tasks.Task.Run(() => _queue.TryDequeue(out x));
    }
    else if(y % 3 == 2)
    {
    System.Threading.Tasks.Task.Run(() =>
    {
        if (_queue.Any(t => t == testGuid))
        {
        // Do something
        }
    });

    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:显然标题不够清晰,所以更新了代码示例以包含实际的多线程行为,是的,上面的代码只是多线程行为的一个示例.

c# linq concurrency

8
推荐指数
1
解决办法
3644
查看次数

SignalR:建立连接时是否可以强制连接在服务器端使用特定传输?

在使用SignalR开发服务器客户端推送机制时,我遇到了最大的并发连接问题.即每个浏览器进程仅支持大约6个到同一域的并发连接.

我目前正在跟踪哪些用户与哪些连接相关联,并且在用户有三个打开的​​连接后,我想强制来自同一用户的其他连接使用长轮询进行传输而不是Web套接字.通过这种方式,我希望避免完全耗尽连接的问题.

我总是可以在客户端上执行此操作,服务器提供非SignalR机制,以通知客户端是否已用完Web套接字连接,然后客户端可以在打开SignalR连接时指定长轮询,但这似乎效率低下.我真的想在连接打开时适当地设置传输.

类似于集线器类中的以下内容.

    /// <summary>
    /// Chooses the correct transport depending on a users connections
    /// </summary>        
    public override Task OnConnected()
    {
        if(CanOpenWebSocketsConnection(Context.User.Identity.Name))
        {
            Connection.Transport = Connections.WebSockets;
        }
        else
        {
            Connection.Transport = Connections.LongPolling;
        }
        return base.OnConnected();                
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc long-polling signalr

3
推荐指数
1
解决办法
6226
查看次数

标签 统计

c# ×2

asp.net ×1

asp.net-mvc ×1

concurrency ×1

linq ×1

long-polling ×1

signalr ×1