2013-02-28 30 views
7

Tôi muốn có thể tạo một tác vụ mà không cần khởi động tác vụ, tương tự như chạy var a = new Task(); a.Start(); nhưng với một nhà máy tùy chỉnh. Các nhà máy cung cấp StartNew(), nhưng tôi không thể tìm thấy một phương pháp để tách riêng hai hành động. Điều này có thể không?Tạo nhưng không bắt đầu một nhiệm vụ với nhà máy sản xuất nhiệm vụ tùy chỉnh?

+0

Điều bạn có thể thấy thú vị: ["Task.Factory.StartNew" vs "nhiệm vụ mới (...). Bắt đầu"] (http://blogs.msdn.com/b/pfxteam/archive/2010/06/ 13/10024153.aspx). Nhà văn tạo ra một số điểm thú vị về lý do tại sao bạn có thể không muốn trì hoãn nhiệm vụ bắt đầu. –

Trả lời

14

A TaskFactory về cơ bản là hai bộ tùy chọn mặc định (tạo và tiếp tục), mã thông báo hủy mặc định và trình lập lịch tác vụ.

Bạn có thể chỉ định mã thông báo hủy và tùy chọn tạo khi bạn vừa mới tạo một tác vụ - và sau đó khởi động nó trên bất kỳ trình lập lịch biểu nào bạn muốn. Vì vậy:

Task task = new Task(action, 
        factory.CancellationToken, 
        factory.CreationOptions); 
... 
task.Start(factory.Scheduler); 

nên thực hiện công việc ngoài các tùy chọn tiếp tục. Các tùy chọn tiếp tục chỉ có liên quan khi bạn thêm phần tiếp tục, mà bạn có thể chỉ định trực tiếp. Có điều gì không được đề cập đến không?

(Một điều cần lưu ý là Mô hình không đồng bộ dựa trên nhiệm vụ thường xoay quanh các tác vụ "nóng" được bắt đầu vào lúc bạn nhìn thấy chúng. Vì vậy, có thể bạn muốn tránh để lộ các tác vụ chưa được khởi động quá rộng.)

+0

Điều này làm cho việc tạo ra các nhà máy dự phòng khi chúng tôi đang sửa đổi hành vi tác vụ theo cách thủ công khi tạo nhiệm vụ (và tiếp tục). Tôi đã hy vọng có một phương pháp tao nhã hơn mà tôi đã bỏ qua, nhưng nếu tôi không cho rằng đó là điều tốt để biết quá =) – Jake

+0

@Jake: Vâng, bạn có thể muốn giữ cho nhà máy ở đó giống như cách đóng gói các tùy chọn đó - hoặc để bắt đầu các nhiệm vụ khác ngay lập tức. Quan điểm của tôi là nó không thực sự làm nhiều mà bạn không thể làm bằng tay. –

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