Metode kedua Task.Run
,, telah diperkenalkan di versi terbaru dari kerangka .NET (dalam .NET 4.5).
Namun, metode pertama Task.Factory.StartNew
,, memberi Anda kesempatan untuk mendefinisikan banyak hal bermanfaat tentang utas yang ingin Anda buat, sementara Task.Run
tidak menyediakan ini.
Misalnya, katakanlah Anda ingin membuat utas tugas yang berjalan lama. Jika utas kumpulan utas akan digunakan untuk tugas ini, maka ini bisa dianggap penyalahgunaan utas utas.
Satu hal yang dapat Anda lakukan untuk menghindari ini adalah menjalankan tugas di utas terpisah. Utas yang baru dibuat yang akan didedikasikan untuk tugas ini dan akan dihancurkan begitu tugas Anda selesai. Anda tidak dapat mencapai ini dengan Task.Run
, sementara Anda dapat melakukannya dengan Task.Factory.StartNew
, seperti di bawah ini:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Seperti yang dinyatakan di sini :
Jadi, di Pratinjau Pengembang .NET Framework 4.5, kami telah memperkenalkan metode Task.Run yang baru. Ini sama sekali tidak menghapus Task.Factory.StartNew,
tetapi harus dianggap sebagai cara cepat untuk menggunakan
Task.Factory.StartNew tanpa perlu menentukan banyak parameter. Ini jalan pintas. Bahkan, Task.Run sebenarnya diimplementasikan dalam hal logika yang sama yang digunakan untuk Task.Factory.StartNew, hanya meneruskan beberapa parameter default. Saat Anda memberikan Action ke Task.Run:
Task.Run(someAction);
itu persis sama dengan:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
penggunaan defaultTaskScheduler.Current
yang mungkin merupakan kumpulan utas tetapi juga bisa menjadi utas UI.