C#多线程并发【深入浅出实战】

创建一个线程

Task的创建和执行方式有如下三种: 可以带参数

 public void testTask(string[] args)
        {
            //1.new方式实例化一个Task,需要通过Start方法启动
            Task task = new Task(() =>
            {
                Thread.Sleep(100);
                Console.WriteLine($"hello, task1的线程ID为{Thread.CurrentThread.ManagedThreadId}");
            });
            task.Start();

            //2.Task.Factory.StartNew(Action action)创建和启动一个Task
            Task task2 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(100);
                Console.WriteLine($"hello, task2的线程ID为{ Thread.CurrentThread.ManagedThreadId}");
            });

            //3.Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
            Task task3 = Task.Run<string>(() =>
            {
                Thread.Sleep(100);
              return $"hello, task3的线程ID为{ Thread.CurrentThread.ManagedThreadId}";
            });
            Console.WriteLine("执行主线程!");
            Console.ReadKey();
        }

Task的阻塞方法(Wait/WaitAll/WaitAny)

task.Wait() 表示等待task执行完毕,功能类似于thead.Join(); Task.WaitAll(Task[] tasks) 表示只有所有的task都执行完成了再解除阻塞;
Task.WaitAny(Task[] tasks) 表示只要有一个task执行完毕就解除阻塞

//阻塞主线程。task1,task2都执行完毕再执行主线程
            //执行【task1.Wait();task2.Wait();】可以实现相同功能
            Task.WaitAll(new Task[] { taskwait1, taskwait2 });

使用后 当前线程阻塞 等 使用的线程结束
 如果将的WaitAll换成WaitAny,那么任一task执行完毕就会解除线程阻塞,执行结果是?

Task的延续操作(WhenAny/WhenAll/ContinueWith)

//task1,task2执行完了后执行后续操作
            Task.WhenAll(task, task2).ContinueWith((t) =>
            {
                Thread.Sleep(100);
                Console.WriteLine("执行后续操作完毕!");
            });

            //通过TaskFactroy实现   等待完成后执行后续的线程
            Task.Factory.ContinueWhenAll(new Task[] { task, task2 }, (t) =>
             {
                 Console.WriteLine($"hello, task ContinueWhenAll的线程ID为{Thread.CurrentThread.ManagedThreadId}");
             });

Task的任务取消(CancellationTokenSource)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值