zoukankan      html  css  js  c++  java
  • C# 任务、线程、同步(二)

    取消架构

    1、Parallel.For()方法的取消

     1  static void CancelParallelLoop()
     2         {
     3             var cts = new CancellationTokenSource();
     4             cts.Token.Register(() => Console.WriteLine("*** token canceled"));
     5 
     6             cts.CancelAfter(200);
     7 
     8             try
     9             {
    10                 ParallelLoopResult result = Parallel.For(0, 100, new ParallelOptions() { CancellationToken = cts.Token },
    11                     x => {
    12                         Console.WriteLine("loop {0} started", x);
    13                         int sum = 0;
    14                         for (int i = 0; i < 100; i++)
    15                         {
    16                             Thread.Sleep(2);
    17                             sum += i;
    18                         }
    19                         Console.WriteLine("loop {0} finished", x);
    20                     });
    21             }
    22             catch (Exception ex) 
    23             {
    24                 Console.WriteLine(ex.Message);
    25             }
    26         }

    2、任务的取消

     1  static void CancelTask()
     2         {
     3             var cts = new CancellationTokenSource();
     4             cts.Token.Register(() => Console.WriteLine("*** task cancelled"));
     5             cts.CancelAfter(500);
     6 
     7             Task t1 = Task.Run(() => {
     8                 Console.WriteLine("in task ");
     9                 for (int i = 0; i < 20; i++)
    10                 {
    11                     Thread.Sleep(50);
    12                     CancellationToken token = cts.Token;
    13                     if(token.IsCancellationRequested)
    14                     {
    15                         Console.WriteLine("cancelling was requested, cancelling from within the task");
    16                         token.ThrowIfCancellationRequested();
    17                         break;
    18                     }
    19                     Console.WriteLine("in loop");
    20                 }
    21                 Console.WriteLine("task finished without cancellation");
    22             },cts.Token);
    23             try
    24             {
    25                 t1.Wait();
    26             }
    27             catch (AggregateException ex)
    28             {
    29                 Console.WriteLine("exception: {0}, {1}", ex.GetType().Name, ex.Message);
    30                 foreach (var innerException in ex.InnerExceptions)
    31                 {
    32                     Console.WriteLine("inner excepion: {0}, {1}", ex.InnerException.GetType().Name, ex.InnerException.Message);
    33                 }
    34             }
    35         }
  • 相关阅读:
    PHP的Tag标签
    PHP 常量
    MySQL知识点链接
    Codeforces Round #593 (Div. 2)D(螺旋形模拟)
    【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
    【PAT甲级】1059 Prime Factors (25 分)
    【PAT甲级】1058 A+B in Hogwarts (20 分)
    【PAT甲级】1057 Stack (30 分)(分块)
    【PAT甲级】1056 Mice and Rice (25 分)
    Atcoder Grand Contest 039C(容斥原理,计数DP)
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6031005.html
Copyright © 2011-2022 走看看