2012-02-13 826 views
8

我下面任务状态WaitingForActivation - 这是什么意思?

var newTask = Task.Factory.StartNew(() => 
{ 
fcStartSubPageCrawl(srMainSiteURL, srMainSiteId); 
}).ContinueWith((t) => 
{ 
    var aggException = t.Exception.Flatten(); 
foreach (var exception in aggException.InnerExceptions) 
    csPages.LogException(exception.ToString()); 
}, 
TaskContinuationOptions.OnlyOnFaulted); 

首先看WPF任务,现在,当我检查(分配到任务列表中的新任务)的任务状态

这样的:

if (tskLocalTaskList[i].IsCompleted == false) 

我看到那任务状态= WaitingForActivation

这是什么意思?为什么它正在等待激活?

C#4.0 WPF

回答

6

WaitingForActivation是任务所在的启动方法的调用,并在该任务获取任务调度计划的时刻之间的时间。所以直接调用任务的start方法后,任务状态将被设置为WaitingForActivation并调用scheduler.AddWork。在这里,任务可以是调度程序(WaitingToRun),也可以是immidiatly。

哦,这与WPF无关,任务是BCL的一部分

+1

我该如何让任务立即开始? – MonsterMMORPG 2012-02-13 03:56:43

+2

这是由于您的声明为ContinueWith。这将创建一个新的任务,您将其分配给var newTask。但是,当原始任务不会导致异常时,该任务永远不会计划或运行。您应该先将原始任务分配给newTask,然后调用newTask.ContinueWith(....,TaskContinuationOptions.OnlyOnFaulted); – Polity 2012-02-13 04:02:41

+0

感谢您的回答。我目前的方式也正在工作。它不是永远等待。然而,我修改了代码,如你所说,现在我检查我看到运行。尽管我没有感受到速度差异。还是一样。这是关于抓取网页的。 – MonsterMMORPG 2012-02-13 04:12:33