<span style="color: #0000ff;">namespace<span style="color: #000000;"> TaskConsole
{
<span style="color: #0000ff;">class<span style="color: #000000;"> Program
{
<span style="color: #0000ff;">static <span style="color: #0000ff;">void Main(<span style="color: #0000ff;">string<span style="color: #000000;">[] args)
{
<span style="color: #008000;">//<span style="color: #008000;">当前线程标识
<span style="color: #000000;"> Console.WriteLine(Thread.CurrentThread.GetHashCode());
Task task </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> Task(run);
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">任务标识:</span><span style="color: #800000;">"</span> + task.GetHashCode() + <span style="color: #800000;">"</span><span style="color: #800000;">,状态:</span><span style="color: #800000;">"</span> + task.Status);<span style="color: #008000;">//</span><span style="color: #008000;">状态 </span>
<span style="color: #000000;"> task.Start();
Console.WriteLine(
<span style="color: #800000;">"<span style="color: #800000;">任务标识:<span style="color: #800000;">" + task.GetHashCode() + <span style="color: #800000;">"<span style="color: #800000;">,状态:<span style="color: #800000;">" + task.Status);<span style="color: #008000;">//<span style="color: #008000;">状态
</span><span style="color: #008000;">//</span><span style="color: #008000;">任务完成后执行新任务</span>
Action<Task> ation = <span style="color: #0000ff;">new</span> Action<Task><span style="color: #000000;">(taskStart);
task.ContinueWith(ation);
Console.Read();
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> taskStart(Task task)
{
task </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> Task(run);
task.Start();
</span><span style="color: #008000;">//</span><span style="color: #008000;">如果注释上面两句话,则任务标识为 task.ContinueWith(ation)中task的任务</span>
Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">任务标识:</span><span style="color: #800000;">"</span> + task.GetHashCode() + <span style="color: #800000;">"</span><span style="color: #800000;">,状态:</span><span style="color: #800000;">"</span> + task.Status + <span style="color: #800000;">"</span><span style="color: #800000;">,当前线程:</span><span style="color: #800000;">"</span> + Thread.CurrentThread.GetHashCode());<span style="color: #008000;">//</span><span style="color: #008000;">状态</span>
<span style="color: #000000;">
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> run()
{
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">this is run</span><span style="color: #800000;">"</span><span style="color: #000000;">);
}
}
}
解释几个方法:
一,task.GetHashCode(),是获取Task实例的唯一标识,每个Task都不一样。但是,经过我的测试发现,Task.GetHashCode()并不等于Thread.CurrentThread.GetHashCode()。
二,task.ContinueWith(),是任务结束后继续执行任务的方法,传一个Action,当任务结束后,触发该Action。
运行结果如下,任务刚new出来的时候,task就又状态了,是Created,一但运行了,状态就是WaitingToRun。

根据MSDN的说明,Task.State是获取TaskState的枚举值,其枚举值代表的意义如下(直接复制了MSDN的解释)
|
。 该任务已完成执行,正在隐式等待附加的子任务完成。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!