C# 具有不同参数的C任务操作

C# 具有不同参数的C任务操作,c#,task,C#,Task,我在一个游戏服务器上工作,目前我有一个annound类,它负责向连接的客户端宣布服务器中发生的任何事情 游戏服务器应该能够容纳400多名玩家而不会出现问题 到目前为止,当我试图在地图上向所有在场的玩家宣布效果时,我就是这么做的: public static void AnnounceMagicEffect(byte effect, UInt16 x, UInt16 y, byte z) { Task.Factory.StartNew(() => {

我在一个游戏服务器上工作,目前我有一个annound类,它负责向连接的客户端宣布服务器中发生的任何事情

游戏服务器应该能够容纳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);
                }
            });
        }
但它不支持参数,因为我可能不得不像这样使用它们:

AnnouncePlayerMove(Player player, Direction direction);
AnnouncePlayerSay(Player player, string text);

如何实现这一点?

无法通过查看代码示例来判断代码示例是否是线程安全的。这取决于Map.getPlayerSpector和Sending.sendMagiceFect方法的功能

<>你必须后退一步,考虑如果另一个任务修改了那些方法用来生成它们的响应的内存会发生什么。另一个任务可以修改玩家观众列表吗?Map.GetPlayerSpector和Sending.SendMagiceFect方法是修改数据,还是只读取数据

将您的方法announcemagicefect更改为接受任何操作委托会使其更加模糊。谁知道它的线程是否安全

创建任务时,它会将创建任务之前存在的内存与其创建任务共享

举个例子:

List<string> listOfFiles = new List<string>();
listOfFiles.Add( filename1 );
listOfFiles.Add( filename2 );
listOfFiles.Add( filename3 );

Task.Run( () =>
{
  foreach( string file in citationFiles )
    File.Delete( file );
} );

citationFiles.Clear();
这些文件很可能永远不会被删除。主任务将在任务开始之前清除列表


你需要考虑同时在同一内存上运行的多个任务。

更多的是我如何实现这一点,而不是你的现有代码是否是线程安全的。要向所有连接方宣布,您可以实现一个信号集线器或WebSockets室,并向该室广播。我已经在做宣布了,我想问的是,我目前所做的方式是否是线程安全的,以及如何对新任务执行操作
List<string> listOfFiles = new List<string>();
listOfFiles.Add( filename1 );
listOfFiles.Add( filename2 );
listOfFiles.Add( filename3 );

Task.Run( () =>
{
  foreach( string file in citationFiles )
    File.Delete( file );
} );

citationFiles.Clear();