首页 > 其他分享 >Task 类 多线程

Task 类 多线程

时间:2023-03-26 21:45:32浏览次数:67  
标签:Task Thread 多线程 t1 任务 线程 执行

Task 类

定义

命名空间: System.Threading.Tasks
程序集: System.Runtime.dll
表示一个异步操作
public class Task : IAsyncResult, IDisposable
继承  Object->Task
派生 System.Threading.Tasks.Task<TResult>
实现 IAsyncResult  IDisposable

注解

类 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();


        }

 

 

  

 

标签:Task,Thread,多线程,t1,任务,线程,执行
From: https://www.cnblogs.com/friend/p/17259634.html

相关文章