Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理与信号集线器的并发性_C#_Asp.net_Signalr - Fatal编程技术网

C# 如何处理与信号集线器的并发性

C# 如何处理与信号集线器的并发性,c#,asp.net,signalr,C#,Asp.net,Signalr,我有一个游戏班,里面有一份玩家名单 class Game { Player[] Players; } 我有两种方法: OnDisconnected() { room.Players.Remove(3); } CalculateScore() { int score = room.Players[3].Score; // use score } OnDisconnected正在删除一名玩家,CalculateScore正在使用该玩家计算分数 当CalculateScore运行

我有一个游戏班,里面有一份玩家名单

class Game {
  Player[] Players;
}
我有两种方法:

OnDisconnected() {
  room.Players.Remove(3);
}

CalculateScore() {
  int score = room.Players[3].Score;
  // use score
}
OnDisconnected
正在删除一名玩家,
CalculateScore
正在使用该玩家计算分数

CalculateScore
运行时用户断开连接时会发生什么情况


如何处理这种情况?

这与SignalR的实现没有多大关系,但更重要的是您的用例要求是什么,以及您如何处理
CalculateScore
的结果

我将以以下方式处理这种情况:

    CalculateScore()
        {
           if(room.Players[3] == null)
              {
                //get the latest information on this user based on his Id from the
               //database and calculate his score based on that.
              }

             //if the user is still connected, calculate the score using
             // room.Players[3].Score
        }
这样,如果用户已连接,则您可以在不访问数据库的情况下计算他的分数,因为您是从模型中获取他的分数的,如果用户已断开连接,则您仍然可以计算他的分数(但由于数据库访问,操作将变慢)


希望这有帮助。祝你好运

请阅读这篇文章,作者是一位首席开发人员并发性是你需要在应用程序逻辑中处理的问题。这也是另一位Signal开发人员。建议使用ConcurrentDictionary来管理玩家连接。@timothyclifford,你能回答:a。这真的令人担忧吗?B我应该如何构造数据以更轻松地处理此问题?C我可以利用哪些库?您所说的场景是,在计算客户机的分数时,客户机断开连接。这可能是一个问题,但对于这种情况,我相信你只需在计算和返回分数之前检查球员是否存在就足够了。如果客户端在此期间断开了连接,这将由框架处理。除非您的需求允许,否则编写额外的逻辑或使用库是没有意义的。