.NET Task.Factory.StartNew

Đọc nhiều tài liệu trên mạng, tuy nhiên cách dùng an toàn là

với mỗi khi cần new task, thì task cha dùng:

Task.Factory.StartNew

Và task con thì dùng

Task.Run

 

Note:

Task.Run(action) == Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);

Task.Factory.StartNew(action) == Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Current);

Đọc thêm:

http://www.infoworld.com/article/3060652/application-development/on-taskfactorystartnew-and-taskrun-methods.html

The Parallel.Invoke method is equivalent setting up a number of tasks using Task.Factory.StartNew(…) then Task.WaitAll(…).

https://colinmackay.scot/tag/parallel-invoke-task-factory-startnew/

Vì nếu dùng tiếp StartNew -> nó dùng tiếp cái current schedule -> trong một số ứng dụng như UI thì nó sẽ dùng cùng thread -> có thể gây ra một số bugs

Tham khảo:

https://richnewman.wordpress.com/2012/11/21/why-starting-a-new-task-in-the-task-parallel-library-tpl-doesnt-always-start-a-new-thread/

 

Đọc thêm về TaskScheduler.Default or TaskScheduler.Current

http://stackoverflow.com/questions/6800705/why-is-taskscheduler-current-the-default-taskscheduler

 

 

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s