西安市环境遥感监测管理系统
377 2023-04-03 04:30:32
// Parallel Task.Run(() => { ParallelOptions parallelOptions = new ParallelOptions(); parallelOptions.MaxDegreeOfParallelism = 5;//控制执行的线程数量 Parallel.For(0, 50, parallelOptions,( i) =>//输出1~50 { Console.WriteLine($"开始{i+1}"); Thread.Sleep(500); Console.WriteLine($"结束{i+1}"); }); });
try { //线程取消 List<Task> tasks = new List<Task>(); CancellationTokenSource cancellationToken = new CancellationTokenSource(); for (int i = 0; i < 50; i++) { int m = i;//临时变量“闭包” tasks.Add(Task.Run(() => { Console.WriteLine($"开始{m + 1}"); if (m == 10) cancellationToken.Cancel();Thread.Sleep(1000); if(!cancellationToken.IsCancellationRequested) Console.WriteLine($"结束{m + 1}"); }, cancellationToken.Token)); } Task.WaitAll(tasks.ToArray()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); }
ConcurrentXXX :这些集合是线程安全的,如果某个动作不适用于线程的当前状态,它们就返回false。在继续之前,总是霈要确认添加或提取元素是否成功。不能相信集合会完成任务。
ConcurrentQueue<T> 队列、ConcurrentStack<T> 堆栈、ConcurrentBag<T> 包、ConcurrentDictionary<TKey, TValue> 字典、BlockingCollection<T> 集合、BlockingCollection<T> 阻塞式集合