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         }
  • 相关阅读:
    iuplua test failure
    lua C++ wrapper
    lua
    Redux系列01:从一个简单例子了解action、store、reducer
    Meteor入门介绍
    Express入门介绍vs实例讲解
    React半科普文
    Express模版引擎hbs备忘
    Gulp:插件编写入门
    gulp.src()内部实现探究
  • 原文地址:https://www.cnblogs.com/farmer-y/p/6031005.html
Copyright © 2011-2022 走看看