我正在构建一个使用套接字连接到服务器的桌面应用程序。我有一个用户列表,我需要每个用户独立连接到该服务器
foreach循环:
foreach (var account in accounts)
{
Connect(account, server);
}
问题是,假设我有200个帐户,而Connect()需要2秒钟才能运行,那么需要花费6分钟以上的时间才能想到foreach循环。
连接功能示例:
private void Connect(User user, Server server)
{
connection = new Connection($"{server.Ip}:{server.Port.ToString()}", user);
connection.Connect(); // await
connection.WaitToConnect(); // await
connection.SendData(); // await
connection.SendAnotherData(); // await
connection.WaitCallBack(); // await
if(connection.everythingFine) // From here connection is "completed" but can't be closed
{
}
// Trigger my event handler on disconnect
connection.Disconnected += disconnectionHandler;
}
由于Connect()是同步的,并与事件处理程序等建立了持久连接。我担心使用线程及其对套接字连接和事件处理程序的影响。
编辑:
问题是:在这种情况下如何在我的foreach循环上实现线程处理?
答案 0 :(得分:0)
无需担心线程。我不太了解您的代码来建议一种更复杂的方法,但是您可以为每个帐户启动一个线程:
foreach (var account in accounts)
{
var t = new Thread((aObj) => Connect ((Account)aObj, server));
t.Start(account);
}