Как остановить существующую задачу, используя Tasks.Parallel в c # - PullRequest
1 голос
/ 26 апреля 2011

Я хочу сделать следующее:

1. Start TCP socket listener on another thread (so it does not block my app.)
2. Start 1..n other processes on other threads which will send data to my listener
3. Stop my listener when all of the other processes have finished.

Как бы я достиг этого, используя библиотеку Parallel в .Net?

Полагаю, мне нужно как-то сохранить ссылку на исходный порожденный поток и завершить его, когда счетчик достигнут или что-то еще?

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Как насчет использования дочерних / родительских задач:

С

http://msdn.microsoft.com/en-us/library/dd537609.aspx

var parent = Task.Factory.StartNew(() =>
{
    Console.WriteLine("Parent task beginning.");

    var child = Task.Factory.StartNew(() =>
    {
        Thread.SpinWait(5000000);
        Console.WriteLine("Attached child completed.");
    }, TaskCreationOptions.AttachedToParent);

});

parent.Wait();
Console.WriteLine("Parent task completed.");

/* Output:
    Parent task beginning.
    Attached task completed.
    Parent task completed.
 */
0 голосов
/ 26 апреля 2011

Если вы используете асинхронный Socket API, вам не придется беспокоиться о том, чтобы раскручивать отдельные потоки для прослушивающих сокетов ... не говоря уже о том, что он вращается вокруг синхронных вызовов производительности.

Пища для размышлений ...

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