注解
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 taskTask t2 = Task.Factory.StartNew(action, "beta");// Block the main thread to demonstrate that t2 is executingt2.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 在指定的时间间隔内完成执行。