官方示例:任务状态
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskTest
{
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
// Wait on a single task with a timeout specified.
Task taskA = Task.Run(() => Thread.Sleep(2000));
try
{
taskA.Wait(1000, cts.Token); // Wait for 1 second.
bool completed = taskA.IsCompleted;
Console.WriteLine("Task A completed: {0}, Status: {1}",
completed, taskA.Status);
if (!completed)
Console.WriteLine("Timed out before task A completed.");
Console.ReadLine();
}
catch (AggregateException)
{
Console.WriteLine("AggregateException in taskA.");
}
catch (OperationCanceledException e)
{
Console.WriteLine("OperationCanceledException in taskA.");
}
}
}
}
运行测试
TaskStatus枚举类
namespace System.Threading.Tasks
{
// 摘要:
// 表示 System.Threading.Tasks.Task 的生命周期中的当前阶段。
public enum TaskStatus
{
// 摘要:
// 该任务已初始化,但尚未被计划。
Created = 0,
//
// 摘要:
// 该任务正在等待 .NET Framework 基础结构在内部将其激活并进行计划。
WaitingForActivation = 1,
//
// 摘要:
// 该任务已被计划执行,但尚未开始执行。
WaitingToRun = 2,
//
// 摘要:
// 该任务正在运行,但尚未完成。
Running = 3,
//
// 摘要:
// 该任务已完成执行,正在隐式等待附加的子任务完成。
WaitingForChildrenToComplete = 4,
//
// 摘要:
// 已成功完成执行的任务。
RanToCompletion = 5,
//
// 摘要:
// 该任务已通过对其自身的 CancellationToken 引发 OperationCanceledException 对取消进行了确认,此时该标记处于已发送信号状态;或者在该任务开始执行之前,已向该任务的
// CancellationToken 发出了信号。 有关更多信息,请参见任务取消。
Canceled = 6,
//
// 摘要:
// 由于未处理异常的原因而完成的任务。
Faulted = 7,
}
}