【小白专用】C# Task 类异步操作-浅谈

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

对于返回值的操作,请使用 Task<TResult> 类。

方法

Delay(Int32)    
创建一个在指定的毫秒数后完成的任务

Delay(Int32, CancellationToken)    
创建一个在指定的毫秒数后完成的可取消任务。

Delay(TimeSpan)    
创建一个在指定的时间间隔后完成的任务

Delay(TimeSpan, CancellationToken)    
创建一个在指定的时间间隔后完成的可取消任务。

依靠系统本身,在某个指定的时间点调用方法

static async Task Main()
{
    // 获取当前时间
    DateTime currentTime = DateTime.Now;
    // 计算下一个指定时间点
    DateTime targetTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 10, 0, 0); // 例如,每天的10点
                                                                                                        // 计算下一个指定时间点与当前时间的时间间隔
    TimeSpan delay = targetTime - currentTime;
    // 等待指定时间间隔
    await Task.Delay(delay);
    // 在指定时间点执行方法
    await ExecuteMethod();
    // 等待程序终止
    Console.WriteLine("按任意键退出...");
    Console.ReadKey();

}


static async Task ExecuteMethod()
{
    // 在这里执行你想要在指定时间点调用的方法
    Console.WriteLine("在指定时间点调用方法");
    // 可以在这里添加你的逻辑代码

}

Run(Action)    
将在线程池上运行的指定工作排队,并返回代表该工作的 Task 对象。

Run(Action, CancellationToken)    
将在线程池上运行的指定工作排队,并返回代表该工作的 Task 对象。 可使用取消标记来取消工作(如果尚未启动)。

Run(Func<Task>)    
将在线程池上运行的指定工作排队,并返回 function 所返回的任务的代理项。

Run(Func<Task>, CancellationToken)    
将在线程池上运行的指定工作排队,并返回 function 所返回的任务的代理项。 可使用取消标记来取消工作(如果尚未启动)。

Run<TResult>(Func<Task<TResult>>)    
将指定的工作排成队列在线程池上运行,并返回由 function 返回的 Task(TResult) 的代理。 可使用取消标记来取消工作(如果尚未启动)。

        public static async Task Main()
        {
            await Task.Run(() => {
                // Just loop.
                int ctr = 0;
                for (ctr = 0; ctr <= 1000000; ctr++)
                { }
                Console.WriteLine("Finished {0} loop iterations",
                                  ctr);
            });

        }

Start()

启动 Task,并将它安排到当前的 TaskScheduler 中执行。

Start(TaskScheduler)

启动 Task,并将它安排到指定的 TaskScheduler 中执行。

        static void Main(string[] args)
        {

            Action<object> action = (object obj) =>
            {
                Console.WriteLine("Task={0}, obj={1}, Thread={2}",
                Task.CurrentId, obj,
                Thread.CurrentThread.ManagedThreadId);
            };

            // Create a task but do not start it.
            Task t1 = new Task(action, "alpha");

            // Construct a started task
            Task t2 = Task.Factory.StartNew(action, "beta");
            // Block the main thread to demonstrate that t2 is executing
            t2.Wait();

            // Launch t1 
            t1.Start();
            Console.WriteLine("t1 has been launched. (Main Thread={0})",
                              Thread.CurrentThread.ManagedThreadId);
            // Wait for the task to finish.

            Console.ReadKey();

        }

Wait()    
等待 Task 完成执行过程。

Wait(CancellationToken)    
等待 Task 完成执行过程。 如果在任务完成之前取消标记已取消,等待将终止。

Wait(Int32)    
等待 Task 在指定的毫秒数内完成执行。

Wait(Int32, CancellationToken)    
等待 Task 完成执行过程。 如果在任务完成之前超时间隔结束或取消标记已取消,等待将终止。

Wait(TimeSpan)    
等待 Task 在指定的时间间隔内完成执行。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值