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 に答える