原文: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还没有计算出来,就会阻塞主线程。