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(); }
- 深入理解spring框架:剖析多线程模式下数据库连接
- golang进程(主线程)与协程
- 多线程(Java.Thread)学习
- threading库设置最大线程
- [linux kernel] struct pid && the way the kernel used to cast uint32_t pid to struct task_struct
- 加速下载体验:C#多线程分块下载文件与实时进度展示
- 线程安全问题的例子以及解决方案示例代码
- 背会了常见的几个线程池用法,结果被问翻了
- 升讯威在线客服系统的并发高性能数据处理技术:为多线程处理同步数据
- 全网最详细的线程池 ThreadPoolExecutor 详解,建议收藏!
本栏目推荐文章