Tôi hiện đang thay thế một số nhà nướng chức năng nhiệm vụ với một thực hiện mới sử dụng các chức năng System.Threading.Tasks mới được tìm thấy trong .net 4.Làm thế nào để nhận được thông báo rằng một System.Threading.Tasks.Task đã hoàn
Tôi có một vấn đề nhỏ mặc dù, và mặc dù tôi có thể nghĩ ra một số giải pháp tôi muốn một số lời khuyên mà trên đó thường là cách tốt nhất để làm điều đó, và nếu tôi thiếu một thủ thuật ở đâu đó.
Điều tôi cần là cho một quá trình tùy ý để có thể bắt đầu Tác vụ nhưng sau đó tiếp tục và không đợi Công việc kết thúc. Không phải là một vấn đề, nhưng khi tôi sau đó cần phải làm một cái gì đó với kết quả của một nhiệm vụ tôi không khá chắc chắn cách tốt nhất để làm điều đó.
Tất cả các ví dụ tôi đã thấy sử dụng Wait() trên tác vụ cho đến khi nó hoàn thành hoặc tham chiếu tham số Kết quả trên tác vụ. Cả hai điều này sẽ chặn chuỗi bắt đầu Tác vụ mà tôi không muốn.
Một số giải pháp tôi đã nghĩ:
Tạo một chủ đề mới và bắt đầu nhiệm vụ trên đó, sau đó sử dụng Chờ() hoặc .Result để chặn các chủ đề mới và đồng bộ hóa kết quả lại cho người gọi bằng cách nào đó, có thể với việc bỏ phiếu cho các tham số IsCompleted.
Có tác vụ 'Thông báo đã hoàn thành' mà tôi có thể bắt đầu sau khi hoàn thành tác vụ tôi muốn chạy, sau đó tăng sự kiện tĩnh hoặc một thứ gì đó.
Chuyển đại biểu vào đầu vào của tác vụ và gọi thông báo đó để hoàn thành nhiệm vụ.
Tôi có thể nghĩ hoặc ưu tiên và chống lại tất cả, nhưng tôi đặc biệt không thích ý tưởng tạo chủ đề mới để bắt đầu nhiệm vụ khi mục đích sử dụng Lớp nhiệm vụ ở nơi đầu tiên là trừu tượng ra khỏi sử dụng Thread trực tiếp.
Bất kỳ suy nghĩ nào về cách tốt nhất? Tôi thiếu một cái gì đó đơn giản? Một sự kiện 'Đã hoàn thành' có quá nhiều để yêu cầu không :)? (Chắc chắn có lý do chính đáng tại sao không có!)
Ngoài sự tò mò, tại sao không sử dụng BackgroundWorker? Nó có nhiệm vụ hoàn thành, cũng như thông báo hủy bỏ. – Robaticus
'BackgroundWorker' không còn cần thiết bây giờ mà' Task' là với chúng tôi. BGW yêu cầu một 'SynchronizationContext', tùy chọn với' Task' (cho phép tính song song lớn hơn). –