2012-02-13 20 views
8

Tôi bắt đầu nhiệm vụ WPF với cách dưới đâyTrạng thái tác vụ WaitingForActivation - điều này có nghĩa là gì?

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); 

Bây giờ khi tôi kiểm tra tình trạng nhiệm vụ

như thế này (nhiệm vụ mới được giao cho danh sách công việc):

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

tôi nhìn thấy trạng thái tác vụ = WaitingForActivation

điều này có nghĩa là gì? Và tại sao nó đang chờ kích hoạt?

C# 4.0 WPF

Trả lời

6

WaitingForActivation là lần nhiệm vụ nằm giữa một cuộc gọi đến phương thức Start và thời điểm, trong đó nhiệm vụ được lên kế hoạch bởi scheduler Task. Vì vậy, trực tiếp sau khi một cuộc gọi đến phương pháp bắt đầu của một nhiệm vụ, tình trạng nhiệm vụ đang được thiết lập để WaitingForActivation và một cuộc gọi đến scheduler.AddWork được thực hiện. Ở đây, Task là một trong hai Scheduler (WaitingToRun) hoặc chạy một cách vô giá trị.

Ồ, và điều này không liên quan gì đến WPF, Nhiệm vụ là một phần của BCL

+1

Làm cách nào để bắt đầu tác vụ ngay lập tức? – MonsterMMORPG

+2

Điều này là do tuyên bố của bạn ContinueWith. Điều này tạo ra một nhiệm vụ mới mà bạn gán cho var newTask. Tuy nhiên, nhiệm vụ này không bao giờ được lên lịch hoặc chạy khi tác vụ gốc sẽ không dẫn đến một ngoại lệ. trước tiên bạn phải gán nhiệm vụ ban đầu cho newTask và sau đó gọi newTask.ContinueWith (...., TaskContinuationOptions.OnlyOnFaulted); – Polity

+0

cảm ơn câu trả lời. cách hiện tại của tôi cũng đang hoạt động. nó không giống như chờ đợi mãi mãi. tuy nhiên tôi đã sửa đổi mã như bạn đã nói và bây giờ tôi kiểm tra xem tôi có đang chạy hay không. mặc dù tôi không cảm thấy sự khác biệt về tốc độ. vẫn vậy. đây là về việc thu thập thông tin các trang web. – MonsterMMORPG

Các vấn đề liên quan