- Task有一个泛型子类叫做Task
,它允许发出一个返回值。 - 使用Func
委托或兼容的Lambda表达式来调用Task.Run就可以得到Task 。 随后,可以通过Result属性来获得返回的结果。
如果这个task还没有完成操作,访问Result属性会阻塞该线程直到该task完成操作。
class Program{static void Main(string[] args){Task<int> task = Task.Run(() =>{Console.WriteLine("Foo");return 3;});// 如果Task没完成,那么就阻塞int result = task.Result;Console.WriteLine(result);}}
class Program{static void Main(string[] args){Task<int> primeNumberTask = Task.Run(() =>Enumerable.Range(2, 3000000).Count(n => Enumerable.Range(2, (int)Math.Sqrt(n) - 1).All(i => n % i > 0)));Console.WriteLine("Task running...");Console.WriteLine("The answer is " + primeNumberTask.Result);}}
Task
可以看作是一种所谓的“未来/许诺”(future、promise),在它里面包裹着一个Result,在稍后的时候就会变得可用。 - 在CTP版本的时候,Task
实际上叫做Future 。
