我正在使用并行的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);
})));
答案 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.
}