我一直在用 C# 编写一个命令行程序,它使用多个连接到同一服务器的 tcp 客户端。每个客户端都驻留在自己的线程中。目前,我正在尝试制定一种有效的方法,在假设 4 个线程之间有效地传播 5 个请求。
我的代码目前如下所示,但我仍然会遇到相互重叠的请求。有谁知道如何有效地防止这些重叠?
// Max connections is 4, interval is 200
// Loop once to give tcp clients chance to connect
var tcpClients = new TcpClient[_maxConnections];
for(int i = 0; i < _maxConnections; i++)
{
tcpClients[i] = new TcpClient();
tcpClients[i].Connect(host, port);
}
// Loop again to setup tasks
for(int i = 0; i < _maxConnections; i++)
{
Task.Factory.StartNew(TcpHandler, tcpClients[i]);
// Sleep so every task starts separate from each other.
Thread.Sleep(_interval);
}
然后 TcpHandler 代码如下所示:
public static void TcpHandler(Object o)
{
// active is already declared
while(_active)
{
var tcpClient = (TcpClient) o;
// .. do some send and receive...
Console.WriteLine("Something here..");
Thread.Sleep(_interval * _maxConnections);
}
}
所以你可以看到我正在睡觉以在每个正在执行的线程之间提供足够的空间,然后它们仍然重叠。
如何使这些线程并行运行而没有任何重叠,并限制在所有 4 个线程中每秒 5 次?
还是我对这一切都错了?