Tại sao chúng ta cần phương thức Task.ContinueWith()
. Chúng ta không thể viết rằng "mã tiếp tục" bên trong cơ thể nhiệm vụ?Tại sao chúng ta cần phương pháp ContinueWith?
Trả lời
Đôi khi bạn nhận được Tác vụ từ bên ngoài và muốn kết nối chuỗi liên kết của bạn với bên ngoài. Ngoài ra còn có các cách để tạo tác vụ không có Hành động (ví dụ: sử dụng TaskCompletionSource).
continuations công tác cho phép bạn chuỗi Nhiệm vụ, mỗi nhiệm vụ trong chuỗi được theo sau là một nhiệm vụ khác
Cũng trong Task.ContinueWith
phương pháp mà bạn không đồng bộ có thể kiểm tra Task
với TaskContinuationOptions
khi mục tiêu Task
hoàn thành hoặc một lỗi xảy ra
Task task = Task.Factory.StartNew
(
() =>
{
//Your action when the task started
}
);
task.ContinueWith
(
_ =>
{
//Your action when the task completed
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent,
TaskScheduler.FromCurrentSynchronizationContext()
);
task.ContinueWith
(
(t) =>
{
//Action when error occured
Exception exception = null;
if (t.Exception.InnerException != null)
{
exception = t.Exception.InnerException;
}
else
{
exception = t.Exception;
}
//You can use this exception
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.AttachedToParent,
TaskScheduler.FromCurrentSynchronizationContext()
);
Để biết thêm thông tin tìm kiếm câu trả lời here
Sasha Goldshtein là đúng. Có những trường hợp mã thành phần 'tiếp tục' của bạn không có quyền truy cập trực tiếp, hoặc thậm chí đặt phương thức thực thi của tác vụ. Ví dụ, một hệ thống có thể cắm được để tổng hợp taks.
Tuy nhiên, có một lý do khác có thể áp dụng. Granularity
Xem xét các yêu cầu có thể kích động việc sử dụng TaskCreationOptions.LongRunning. Trong một hệ thống song song, nơi có hàng trăm tiến trình đang được lên kế hoạch, được thực hiện và hoàn thành, công cụ lên lịch tác vụ đang làm việc để thúc đẩy mối quan hệ bộ xử lý hiệu quả khi lên lịch các tác vụ.
Nếu bạn đang ở trong tình huống mà bạn có thể chia nhiệm vụ thành các nhiệm vụ phụ chi tiết và chuỗi chúng, bạn sẽ không còn cần phải sử dụng TaskCreationOptions.LongRunning. Nói một cách đơn giản, điều này sẽ hoạt động tốt hơn vì dễ dàng lên lịch 100 nhiệm vụ nhỏ để hoàn thành cùng một lúc, hơn là lên lịch 10 nhiệm vụ lớn để thực hiện tương tự trong môi trường chỉ có 4 lõi. Hãy nhớ rằng một nhiệm vụ xích không được đảm bảo để bắt đầu ngay sau khi nó là tiền lệ.
Đây là một câu hỏi thú vị và một câu hỏi chỉ trở thành vấn đề khi bạn muốn có một hệ thống có thể mở rộng.
Nếu bạn hỏi tôi, bạn nên sử dụng ContinueWith() nếu có thể vì nó sẽ giúp quy mô ứng dụng của bạn.
- 1. Tại sao chúng ta cần strdup()?
- 2. Tại sao chúng ta cần sợi
- 3. Tại sao chúng ta cần ng-click?
- 4. Phương pháp ma thuật Php __get và __set - tại sao chúng ta cần những phương pháp này ở đây?
- 5. flexbox vs bảng, tại sao chúng ta cần flexbox?
- 6. Tại sao chúng ta cần các Dịch vụ Web RESTful?
- 7. Tại sao chúng ta cần giao diện trong Java?
- 8. Tại sao chúng ta cần ssh không mật khẩu Hadoop?
- 9. Tại sao chúng ta cần funcall trong Lisp?
- 10. Tại sao chúng ta cần toán tử === đặc biệt này?
- 11. Tại sao chúng ta cần các nhà thầu tĩnh?
- 12. Tại sao chúng ta cần Properties trong C#
- 13. PHP: Tại sao chúng ta cần hàm so sánh chuỗi?
- 14. Tại sao chúng ta cần sử dụng cơ số?
- 15. lý do tại sao chúng ta cần Hadoop cho hypertable
- 16. Tại sao chúng ta cần đặt khoảng trống trước% c?
- 17. Tại sao chúng ta cần toán tử "delete []"?
- 18. Tại sao chúng ta cần một thẻ fieldset?
- 19. Tại sao chúng ta gọi phương thức doesNotRecognizeSelector:?
- 20. Tại sao tất cả chúng ta kiểm tra xem liệu (tự) trong phương pháp init?
- 21. Tại sao chúng ta tái cấu trúc?
- 22. Tại sao chúng ta sử dụng Response.ClearHeaders()?
- 23. Tại sao chúng ta cần giao diện khi lớp trừu tượng tồn tại?
- 24. Tại sao chúng ta không nên gọi phương thức công khai từ một công chúng khác?
- 25. Tại sao chúng ta cần IEqualityComparer, giao diện IEqualityComparer <T>?
- 26. MVC: tại sao chúng ta cần "điều khiển", hoặc khi nào chúng ta nên sử dụng mẫu này?
- 27. Tại sao chúng ta cần "var self = this" trong các lớp trong Javascript?
- 28. Tại sao chúng ta sử dụng động Proxy
- 29. Mẫu lưu trữ - Tại sao chính xác chúng ta cần Giao diện?
- 30. Tại sao chúng ta cần sử dụng trình lặp trên ArrayList trong Java?