原文: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还没有计算出来,就会阻塞主线程。
本文结合个人实践,探讨C#中Task的使用。介绍了task不获取返回值时不阻塞主线程,获取返回值会阻塞主线程的情况,还提及了task异步获取返回值使用await async的方式,但表示尚未理解透彻,强调用task.result在子线程结果未算出时会阻塞主线程。
5792

被折叠的 条评论
为什么被折叠?



