注解
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 在指定的时间间隔内完成执行。