.net Task

命名空间:System.Threading.Tasks

表示一个可以返回值的异步操作,public class Task<TResult> : System.Threading.Tasks.Task

-------------------------------------------------------------注解-------------------------------------------------------------

Task<TResult>类表示单个操作,该操作返回一个值并且通常以异步方式执行。 Task<TResult> 对象是在 .NET Framework 4 中首次引入的 基于任务的异步模式 的中心组件之一。 由于对象执行的工作 Task<TResult> 通常在线程池线程上异步执行,而不是在主应用程序线程上同步执行,因此可以使用 Status 属性以及 IsCanceled 、 IsCompleted 和 IsFaulted 属性来确定任务的状态。 通常,lambda 表达式用于指定任务要执行的工作。

Task<TResult> 可以通过多种方式创建实例。 从开始,最常见的方法 .NET Framework 4.5 是调用静态 Task.Run<TResult>(Func<TResult>) 或 Task.Run<TResult>(Func<TResult>, CancellationToken) 方法。 这些方法提供了一种简单的方法来通过使用默认值来启动任务,而无需获取其他参数。 下面的示例使用 Task.Run<TResult>(Func<TResult>) 方法来启动任务,该任务将循环,并显示循环迭代次数:

 

---------------------------------------------------------------------------------使用方法1------------------------------------------------------------

 

Task.Run<TResult>(Func<TResult>) ,应为有返回值,所以不能用Action委托,只能用Func<TResult>

 

 

.net  Task<TResult>
using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
View Code

---------------------------------------------------------------------------------使用方法2------------------------------------------------------------

 

调用静态 TaskFactory.StartNew 或 TaskFactory<TResult>.StartNew 方法
.net  Task<TResult>
using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
View Code

 

 

 

 

上一篇:excel 快速查找两列数据中不同内容


下一篇:阿里妈妈基于检索的用户行为兴趣CTR模型——SIM