色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

.Net4.0 Parallel編程(三)Data Parallelism 下

  在上篇文章中介紹了如何Break、Stop循環,以及如何定義線程局部變量。在本文中介紹如何在外部去取消循環、以及異常的處理。

  Cancel

  在并行的循環中支持通過傳遞ParallelOptions參數中的CancellationToken進行取消循環的控制,我們可以CancellationTokenSource實例化之后傳遞給ParallelOptions對象Cancellation值。下面來看個示例:

[TestMethod]
public void CancelLoop()
{
var sourceNums
= Enumerable.Range(0, 1000000000);
var cts
= new CancellationTokenSource();
var po
= new ParallelOptions();
var stack
= new ConcurrentStack<int>();
po.CancellationToken
= cts.Token;
po.MaxDegreeOfParallelism
= System.Environment.ProcessorCount;
Task.Factory.StartNew(()
=>
{
foreach (var num in sourceNums)
{
if (num == 1000000)
cts.Cancel();
}
});

try
{
Parallel.ForEach(sourceNums,po, num
=>
{
stack.Push(num);
po.CancellationToken.ThrowIfCancellationRequested();
});
}
catch (OperationCanceledException e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine(stack.Count);
}

NET技術.Net4.0 Parallel編程(三)Data Parallelism 下,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 泸西县| 西和县| 海门市| 抚顺县| 穆棱市| 天镇县| 清丰县| 瑞丽市| 白玉县| 金川县| 彭水| 灵台县| 鄂托克旗| 墨玉县| 万安县| 莒南县| 西贡区| 湖州市| 宜章县| 固安县| 大新县| 枣阳市| 和田县| 阳高县| 德清县| 上栗县| 云南省| 楚雄市| 会东县| 东莞市| 惠来县| 从化市| 唐河县| 抚松县| 乌鲁木齐县| 永济市| 盐源县| 江孜县| 呼玛县| 龙南县| 合山市|