如何在c#中使用Tasks.Parallel停止现有任务

时间:2011-04-26 12:58:19

标签: c# .net parallel-processing task-parallel-library

我要做的事情如下:

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.

如何使用.Net中的并行库实现此目的?

我认为我需要以某种方式保留对初始生成的线程的引用,并在到达计数器时终止它或者什么?

2 个答案:

答案 0 :(得分:1)

使用子/父任务怎么样:

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.
 */

答案 1 :(得分:0)

如果您使用的是异步套接字API,则不必担心为您的侦听套接字启动单独的线程...更不用说它围绕性能的同步调用运行。

思考的食物......