Task

1、生命周期

  • 创建任务
  • 等待运行
  • 运行中
  • 完成(成功完成,失败完成,取消完成)

2、基本知识

  • 创建任务:new Task(),Task.Run(),Task.Factory.StartNew()
  • 等待任务完成 Task1.Wait(),Task.WaitAll(),Task.WaitAny()
  • 任务完成后执行 Task.WhenAll(),Task.WhenAny(),Task1().ContinueWith()

3、任务取消

3.1、CancellationTokenSource.Cancel()

采用CancellationTokenSource,调用CancellationTokenSource.Cancel()取消任务。在任务中并不会强制取消任务,还需要显示调用取消任务

  • 方法一: CancellationTokenSource.Token.ThrowIfCancellationRequested();
  • 方法二:CancellationTokenSource.Token.IsCancellationRequested

3.2、任务取消后执行任务

tokenSource.Token.Register(() => { Console.WriteLine("取消任务"); });

3.3、CancellationTokenSource.token传入任务的构造器中

CancellationTokenSource.token传入任务的构造器中时,任务取消后得任务状态是取消状态,否则不传的话是失败状态

4、捕获异常

  • 方法一:在wait(),waitAll(),waitAny()中添加异常处理
           try
            {
                Task1.Wait();
            }
            catch(Exception ex)
            {
               ....
            }
  • 方法二:使用委托
    new Task(() =>
    {
        try
        {
           ....
        }
        catch (Exception ex)
        {
            TaskException?.Invoke(ex);
        }
    });

4、线性安全

  • BlockingCollection,ConcurrentQueue(T),ConcurrentStack(T),ConcurrentDictionary(TKey, TValue)

你可能感兴趣的:(Task)