C# task

原文:https://www.cnblogs.com/struggle999/p/6933376.html

在此基础上,加上个人实践成本文。



1、task不获得返回值,不阻塞主线程

main

    System.Console.WriteLine("主线程开始");

            Task<int> task = Task.Run(() => ThreadTest(10));
            //var result = task.Result;

            System.Console.WriteLine("主线程结束,result={0}");
            System.Console.ReadLine();

调用方法:

  public static int ThreadTest(int i)
        {
            Thread.Sleep(1000);
            System.Console.WriteLine("子线程开始");
            return i * 100;
        }

执行结果:

确实有了线程的效果。



2、task 获得返回值,阻塞主线程

main 里面 : 多了 var result = task.Result;

   System.Console.WriteLine("主线程开始");

            Task<int> task = Task.Run(() => ThreadTest(10));
            var result = task.Result;

            System.Console.WriteLine("主线程结束,result={0}");
            System.Console.ReadLine();

调用方法(同1):

   public static int ThreadTest(int i)
        {
            Thread.Sleep(1000);
            System.Console.WriteLine("子线程开始");
            return i * 100;
        }

执行结果:

用了task,如果要获得result,虽然task没有join方法,还是会阻塞主线程。



 3、task 异步 获得返回值 await  async

还没理解透。

 

 



只要用task.result,如果子线程的result还没有计算出来,就会阻塞主线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值