一次停止多个任务

时间:2012-05-26 20:35:16

标签: c# multithreading

我正在使用并行的foreach循环启动多个任务。

现在我想点击停止按钮停止所有任务。我怎么能这样做?

这是我的代码:

tasks2 = new List<Task>();            

Parallel.ForEach<RssToProcess>(RssFeeds, rssFeed =>
    tasks2.Add(Task.Factory.StartNew(() =>
    {
        string urlss = rssFeed.RssUrl;
        nourl += urlss + System.Environment.NewLine;

        RssReader rs = new RssReader();
        rs.FeedsourceLoaded += new EventHandler(rs_FeedsourceLoaded);
        rs.ItemAdded += new EventHandler(rs_ItemAdded);
        rs.AllItemAdded += new EventHandler(rs_AllItemAdded);
        rs.RssReaderrssitemsCountgeta += new EventHandler(rs_RssReaderrssitemsCountgeta);
        rs.RdfMode = true;

        RssFeed f = rs.Retrieve(rssFeed.RssUrl);
     })));

1 个答案:

答案 0 :(得分:3)

你应该传递一个CancellationToken: http://msdn.microsoft.com/en-us/library/dd537607.aspx

创建一个CancellationToken:

var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;

并将其传递给您的任务:

Task.Factory.StartNew(() =>
        {
           ... Do Work ...
        }, token);

如果您想取消,请致电

tokenSource.Cancel();

但请注意,任务取消是合作的。 在您的任务中,您需要使用

token.ThrowIfCancellationRequested(); // To Abort immediately.

 ... OR ...

if (token.IsCancellationRequested)
{
    // Exit your task manually.
}