用于带螺纹的插座环

时间:2018-12-27 10:45:57

标签: c# .net multithreading sockets foreach

我正在构建一个使用套接字连接到服务器的桌面应用程序。我有一个用户列表,我需要每个用户独立连接到该服务器

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循环上实现线程处理?

1 个答案:

答案 0 :(得分:0)

无需担心线程。我不太了解您的代码来建议一种更复杂的方法,但是您可以为每个帐户启动一个线程:

foreach (var account in accounts)
{
    var t = new Thread((aObj) => Connect ((Account)aObj, server));
    t.Start(account);
}