C# 将数据从 While 循环传递给其他函数

C# Pass data from While loop to other functions

我在本地主机上有一个 Node.Js 服务器 运行 监听一些 API 请求。

这些请求通过 TCP/IP 传送到我的控制台应用程序。这是我的 c# 代码,它通过 GetData() 从节点服务器(托管在 localhost:9999)接收数据并将其传递给另一个函数 SendData().

namespace Datatransfer
{
    /* global variable declaration*/
    class Global
    {
        public static string receive_data;
    }

    class Program
    {
        static string HOST = "localhost";
        static int PORT = 9999;
        static TcpClient client;

      
        /*Function to receive data*/
        static string GetData()
        {
            while (true)
            {
                NetworkStream nwStream = client.GetStream();
                byte[] bytesToRead = new byte[client.ReceiveBufferSize];
                int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
                Global.receive_data= Encoding.ASCII.GetString(bytesToRead, 0, bytesRead);
                Console.WriteLine("Received data : " + Global.receive_data);
                SendData(Global.receive_data)
            }
        }

        /*Function to  send data*/
        static void SendData(string val)
        {
           /*Code to process recevied_data..*/
            Console.WriteLine("Data to Send : " + Global.receive_data);
           /*some codes....*/
        }

        static void Main(string[] args)

        {
            client = new TcpClient();
            client.Connect(HOST, PORT);
            GetData();
            
        }
    }
}

我已将 receive_data 声明为全局,以便在整个应用程序中使用它。代码有效,我得到了输出。每次我向端口 9999 发出 API 请求时,我都会得到输出:

Connection Successfull...
Received data : somestring
Data to Send : somestring

我想知道这是否是一种有效的方法?

是否有另一种方法可以将 receive_data 传递给其他函数 'without' 使用while 循环中的函数(即;SendData())。?或者简单地说,将数据从一个无限的 while 循环传递给 main 或其他函数。

有什么建议吗?

您基本上有两种选择来进一步处理您收到的数据:

  1. 像您一样将它存储在某个地方(从设计的角度来看,您如何实现它并不重要)。需要考虑的一件事是,如果您想存储收到的数据列表 - “消息”,以及如果您收到另一条消息会发生什么。

  2. 调用方法并传递接收到的数据。这将是更好的方法,因为您抽象了实现并可以自由更改它(例如,从存储全局到消息接收器机制或其他)而无需更改您的接收代码。

方法 2) 具有更多信息和更多上下文,因为您在接收数据时触发该方法。在选项 1) 中,您不知道信息的存在时间,或者即使相同的信息被发送了多次。所以更多的信息(总是)更好,如果你在方法调用中不需要它,你可以自由地再次压缩它说一个全局变量。

对于方法 2),您应该记住,该方法是 运行 在您的循环“内部”,因此所有 long-运行 操作都会阻塞循环。但是您仍然可以自由地以某种方式实现它,允许在另一个线程(异步)中处理消息。