我正在研究遊戲服務器,目前我有這個宣佈類,它向連接的客戶端通告發生在服務器中的任何事情。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房間)並向房間廣播。 – 2014-10-27 01:54:34
我在做宣佈,我在質疑的是,如果我目前正在做這件事的方式是線程安全的,以及如何將Action應用於StartNew Task –
2014-10-27 02:09:21