Я работаю над игровым сервером, и в настоящее время у меня есть это Объявление класс, который выполняет задание объявлять подключенным клиентам все, что происходит на сервере.C# Задача Действие с различными параметрами
Игровой сервер должен содержать более 400 игроков без проблем.
До сих пор это то, что я делаю при попытке объявить эффект на карте для всех нынешних игроков:
public static void AnnounceMagicEffect(byte effect, UInt16 x, UInt16 y, byte z) {
Task.Factory.StartNew(() => {
List<Player> spectators = Map.GetPlayerSpectators(x, y, z);
foreach (Player player in spectators) {
Sending.SendMagicEffect(player, effect, x, y, z);
}
});
}
В основном я буду программировать более 50 функций, которые должны объявить что-то для зрителей в игре.
Является ли эта нить безопасной? Это правильный путь для решения этой задачи?
Сначала я хотел сделать такую функцию:
public static void AddGameTask(Action action) {
Task.Factory.StartNew(() => action);
}
Но она не будет поддерживать параметры, как я, возможно, придется использовать их как:
AnnouncePlayerMove(Player player, Direction direction);
AnnouncePlayerSay(Player player, string text);
Как я могу добиться этого ?
Подробнее о строках «Как я могу это достичь», а не о том, действительно ли ваш существующий код является потокобезопасным. Чтобы объявить «всем связанным сторонам», вы можете реализовать концентратор SignalR (или комнату WebSockets) и транслировать в комнату. –
Я уже делаю объявление, что я допрашиваю, если способ, которым я в настоящее время это делаю, является потокобезопасным и как реализовать действие в StartNew Task –