从异步方法获取更新时的 C# 封装

C# encapsulation when getting updates from asynchronous method

我有一个 tcp 连接,我想在服务器 class 的 HandleConnectionAsync 方法中保持打开状态。它将从客户端接收持续更新。

private async void HandleConnectionAsync(TcpClient tcpClient)
    {
        Console.WriteLine("Got connection request from {0}", tcpClient.Client.RemoteEndPoint.ToString());
        try
        {
            using (var networkStream = tcpClient.GetStream())
            using (var reader = new StreamReader(networkStream))
            using (var writer = new StreamWriter(networkStream))
            {
                writer.AutoFlush = true;
                while (true)
                {
                    string dataFromClient = await reader.ReadLineAsync();
                    Console.WriteLine(dataFromClient);

                    await writer.WriteLineAsync("FromServer-" + dataFromClient);
                }
            }
        }
        catch (Exception exp)
        {
            Console.WriteLine(exp.Message);
        }
    }

我希望能够接收 reader 放入 dataFromClient 的更新,而不必将我的代码放在我的服务器实现中 class。 所以:

static void Main(string[] args)
{
    Server s = new Server();
    s.start();
    //get dataFromClient as it comes in here
}

问题是我不确定该怎么做。某种回调或事件?

方法有很多种。

最少的代码是将 Action 传递给您的服务器,例如:

Server s = new Server();
s.start(dataFromClient => 
{
    // do something with data from client
});

并在 HandleConnectionAsync 中调用操作,例如:

private async void HandleConnectionAsync(TcpClient tcpClient, Action<string> callback)
{
    ..
    // Console.WriteLine(dataFromClient);
    callback(dataFromClient);
    ..

然而,这并没有解决一些问题,例如同时有很多客户端,需要知道哪个客户端是哪个。