技术开发 频道

详解.NET 4并行编程入门之Task基础

  2.1 为创建的Task传入参数

  我们之前提过,在创建Task的时候,我们在构造函数中传入了一个System.Action的委托,如果我们想要把一些参数传入到Task中,那么我 们可以传入System.Actionobject>的委托,其中的那个object就是我们传入的参数。还是给大家举个例子:
 

  代码

using System; using System.Threading.Tasks; namespace Listing_04 { class Listing_04 { static void Main(string[] args) { string[] messages = { "First task", "Second task", "Third task", "Fourth task" }; foreach (string msg in messages) { Task myTask = new Task(obj => printMessage((string)obj), msg); myTask.Start(); } // wait for input before exiting Console.WriteLine("Main method complete. Press enter to finish."); Console.ReadLine(); } static void printMessage(string message) { Console.WriteLine("Message: {0}", message); }}}

注意:我们在传入参数后,必须把参数转换为它们原来的类型,然后再去调用相应的方法。例子中,因为System.Action对应的方法是printMessage()方法,而这个方法的要求的参数类型是string,所以要转换为string。

  想向Task传入参素,只能用System.Action<object>

       3.获取Task的执行结果


 如果要获取Task的结果,那么在创建Task的时候,就要采用Task<T>来实例化一个Task,其中的那个T就是task执行完成之后返回结果的类型。之后采用Task实例的Result属性就可以获取结果。

代码显示如下:

代码 

static void Main(string[] args)  {  // create the task  Task<int> task1 = new Task<int>(() =>  {  int sum = 0;  for (int i = 0; i < 100; i++)  {  sum += i;  }  return sum;  });   task1.Start();  // write out the result  Console.WriteLine("Result 1: {0}", task1.Result);   Console.ReadLine();  }

只有在task执行完成之后,才能获取到Result的值。

下面的代码展示了如何通过Task.Factory.StartNew<T>()创建一个Task,并且获取结果:

代码 

static void Main(string[] args) { // create the task Task<int> task1 = Task.Factory.StartNew<int>(() => { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } return sum; }); // write out the result Console.WriteLine("Result 1: {0}", task1.Result); Console.ReadLine(); }
0
相关文章