Phương thức thứ hai Task.Run
, đã được giới thiệu trong phiên bản sau của .NET framework (trong .NET 4.5).
Tuy nhiên, phương pháp đầu tiên Task.Factory.StartNew
, mang đến cho bạn cơ hội để xác định rất nhiều điều hữu ích về chủ đề bạn muốn tạo, trong khi Task.Run
không cung cấp điều này.
Chẳng hạn, giả sử bạn muốn tạo một chuỗi tác vụ chạy dài. Nếu một luồng của nhóm luồng sẽ được sử dụng cho tác vụ này, thì đây có thể được coi là lạm dụng nhóm luồng.
Một điều bạn có thể làm để tránh điều này sẽ là chạy tác vụ trong một luồng riêng biệt. Một luồng mới được tạo sẽ dành riêng cho nhiệm vụ này và sẽ bị hủy khi nhiệm vụ của bạn đã hoàn thành. Bạn không thể đạt được điều này với Task.Run
, trong khi bạn có thể làm như vậy với Task.Factory.StartNew
, như dưới đây:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Như đã nêu ở đây :
Vì vậy, trong Bản xem trước dành cho nhà phát triển .NET Framework 4.5, chúng tôi đã giới thiệu phương thức Task.Run mới. Điều này không có gì làm ảnh hưởng đến Task.Factory.StartNew,
nhưng đơn giản chỉ nên nghĩ là một cách nhanh chóng để sử dụng
Task.Factory.StartNew mà không cần chỉ định một loạt các tham số. Đó là một phím tắt. Trong thực tế, Task.Run thực sự được triển khai theo cùng một logic được sử dụng cho Task.Factory.StartNew, chỉ truyền vào một số tham số mặc định. Khi bạn chuyển một hành động cho nhiệm vụ.Run:
Task.Run(someAction);
điều đó hoàn toàn tương đương với:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
mặc định sử dụngTaskScheduler.Current
có thể là nhóm luồng nhưng cũng có thể là luồng UI.