Как построить класс в новом потоке? - PullRequest
0 голосов
/ 29 декабря 2010

Как построить класс в новом потоке?У меня есть статический класс с именем Server и нестатический класс с именем ClientHandler.Я хотел бы запустить конструктор нового экземпляра ClientHandler в новом потоке.Конструктор принимает 2 аргумента.Я пробовал несколько подходов, но количество потоков моего процесса не увеличивается.Ниже приведен фрагмент кода:

public static class Server
{
    //...

    public static void AcceptConnection(IAsyncResult iar)
    {
        var oldserver = (Socket) iar.AsyncState;
        var client = oldserver.EndAccept(iar);
        Console.WriteLine("Client [{0}] connected from {1}.", CHandlerIndex, client.RemoteEndPoint.ToString());

        new ClientHandler(client, CHandlerIndex); //This has to run in a new thread.

        CHandlerIndex++;
        ServerSocket.BeginAccept(new AsyncCallback(AcceptConnection), ServerSocket);
    }
}

public class ClientHandler
{
    private readonly Socket _client;
    private readonly Parser _pParser;
    public Security S;
    public int ClientIndex;

    //...

    public ClientHandler(Socket cSocket, int cI)
    {
        _client = cSocket;
        InitSecurity();
        _pParser = new Parser(this);
        ClientIndex = cI;
    }

    //...
 }

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Ну, классы (объекты) не запускаются в определенном потоке.Только методы делают.Ваша просьба запустить конструктор в другом потоке выглядит довольно бессмысленно.Это не повлияет на то, где и как будут выполняться другие методы.

В указанном вами коде это выглядит так, как будто новый экземпляр ClientHandler не рутирован, т.е.

Есть ли у ClientHandler какие-либо другие методы?Они могут быть запущены в другом потоке.

0 голосов
/ 29 декабря 2010

Async и Threaded не являются синонимами. если вы хотите, чтобы новый поток создавал один явно, используя либо Threadpool, необработанный «новый поток (Threadstart ...)», либо посмотрите на использование новой параллельной библиотеки задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...