2

我正在使用并行 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);
     })));
4

1 回答 1

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.
}
于 2012-05-26T20:42:36.023 回答