Task

作者: 落地成佛 | 来源:发表于2018-09-25 17:47 被阅读6次

    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

        本文链接:https://www.haomeiwen.com/subject/mmyloftx.html