C#Task,或多个侦听器的Thread

时间:2017-03-30 20:07:45

标签: c# multithreading asynchronous mono tornado

我正在尝试将用Python / Tornado编写的游戏服务器移植到C#。我需要2个TCP异步监听器(具有多个客户端)和主游戏循环。处理这个问题的好方法是什么?

我现在找到了两种方法:

var gameListenerTask = Task.Run(() => {
    //Run listener and wait
});

var lobbyListenerTask = Task.Run(() => {
    // Run other listener.
});

Task.WaitAll(gameListenerTask, lobbyListenerTask);

或者:

        var gameServiceTask = new Thread(() =>
        {
            var gameService = new GameService();
            gameService.Start(15006);
        });

        var lobbyServiceTask = new Thread(() =>
        {
            var lobbyService = new LobbyService();
            lobbyService.Start(15007);
        });


        gameServiceTask.Start();
        lobbyServiceTask.Start();

小问题。如果我读到我正在使用:

handler.BeginReceive(client.Buffer, 0, Settings.ClientBufferSize, 
    SocketFlags.None, new AsyncCallback(client.ReadData), client);

Readed字节总是放在缓冲区的开头?

1 个答案:

答案 0 :(得分:1)

要回答您的问题,您需要了解任务和线程之间的区别。

this问题" Mitch Wheat"回答这个问题如下:

  

任务是你想做的事。

     

线程是执行该任务的众多可能的工作者之一。

     

在.NET 4.0术语中,Task表示异步操作。线程用于通过将工作分解为块并分配给单独的线程来完成该操作。

根据这个答案,你应该使用任务,比如" Sreemat"说。任务注定要使用" async"操作

你的小问题: 基于" BeginReceive"的description方法,我认为你是对的。