Как остановить существующую задачу, используя Tasks.Parallel в C#
Я хочу сделать следующее:
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 ответа
Решение
Как насчет использования дочерних / родительских задач:
От
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.
*/
Если вы используете асинхронный Socket API, вам не придется беспокоиться о том, чтобы раскручивать отдельные потоки для прослушивающих сокетов... не говоря уже о том, что он вращается вокруг синхронных вызовов производительности.
Пища для размышлений...