Я создаю настольное приложение, которое использует сокеты для подключения к серверу.У меня есть список пользователей, и мне нужно, чтобы каждый пользователь был независимо подключен к этому серверу
цикл foreach:
foreach (var account in accounts)
{
Connect(account, server);
}
Дело в том, представьте, что у меня есть 200 учетных записей, и Connect ()для запуска требуется 2 секунды, для завершения цикла foreach потребуется более 6 минут.
Пример функции подключения:
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 в этой ситуации?