Task 类
定义
- 命名空间: System.Threading.Tasks
- 程序集: System.Runtime.dll
- 表示一个异步操作
public class Task : IAsyncResult, IDisposable
- 继承 Object->Task
注解
类 Task 表示不返回值且通常异步执行的单个操作。 Task对象是.NET Framework 4 中首次引入的基于任务的异步模式的核心组件之一。 由于对象执行 Task 的工作通常在线程池线程上异步执行,而不是在主应用程序线程上同步执行,因此可以使用 Status 属性以及 IsCanceled、 IsCompleted和 IsFaulted 属性来确定任务的状态。 大多数情况下,lambda 表达式用于指定任务要执行的工作。
对于返回值的操作,请使用 Task<TResult> 类。
本部分内容:
任务实例化示例
创建和执行任务
分离任务创建和执行
等待一个或多个任务完成
任务和区域性
面向调试器开发人员
任务实例化(创建任务的方法)
由于任务 t4
以同步方式执行,因此它会在主应用程序线程上执行。 其余任务通常在一个或多个线程池线程上异步执行。
注意:使用 Task.Factory.StartNew() 和 Task.Run(() =>{}) 创建的任务会立即执行
static void Main(string[] args) { Action<object?> action = (object obj) => { Console.WriteLine($"Task={Task.CurrentId},obj={obj}," + $"Thread={Thread.CurrentThread.ManagedThreadId}"); }; //1.new创建一个任务,但并不会立即执行,除非调用 Start()方法 Task t1 = new(action, "alpha_T1");//alpha_T1 为传给委托的参数 //2.使用StartNew方法创建一个任务并立即执行 Task t2 = Task.Factory.StartNew(action, "beta_T2");//beta_T2 为传给委托的参数 //阻塞主线程以证明 t2 正在执行 t2.Wait(); //执行 t1 t1.Start(); Console.WriteLine("t1 已开始执行. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId); //等待t1任务执行完成 t1.Wait(); //3.使用Task.Run 创建任务,立即执行 string taskData = "delta_T3"; Task t3 = Task.Run(() => { Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, taskData, Thread.CurrentThread.ManagedThreadId); }); t3.Wait(); Task t4 = new Task(action, "gamma_T4"); //同步运行,即在主线程上运行 t4.RunSynchronously(); t4.Wait(); Console.ReadKey(); }