Dalam istilah ilmu komputer, a Taskadalah masa depan atau janji . (Beberapa orang menggunakan kedua istilah itu secara sinonim, beberapa menggunakannya secara berbeda, tidak ada yang bisa menyetujui definisi yang tepat .) Pada dasarnya, sebuah Task<T>"janji" untuk mengembalikan Anda T, tetapi tidak sekarang sayang, saya agak sibuk, kenapa tidak kamu kembali lagi nanti?
A Threadadalah cara untuk memenuhi janji itu. Tetapi tidak setiap orang Taskmembutuhkan yang baru Thread. (Sebenarnya, membuat utas sering kali tidak diinginkan, karena melakukannya jauh lebih mahal daripada menggunakan ulang utas yang ada dari threadpool. Lebih lanjut tentang itu sebentar lagi.) Jika nilai yang Anda tunggu berasal dari sistem file atau database atau jaringan, maka tidak perlu thread untuk duduk dan menunggu data ketika dapat melayani permintaan lainnya. Sebagai gantinya, mereka Taskmungkin mendaftarkan panggilan balik untuk menerima nilai saat mereka siap.
Secara khusus, Tasktidak tidak mengatakan mengapa hal itu adalah bahwa dibutuhkan waktu yang lama untuk kembali nilai. Ini mungkin bahwa dibutuhkan waktu yang lama untuk menghitung, atau mungkin bahwa dibutuhkan waktu yang lama untuk mengambil. Hanya dalam kasus sebelumnya Anda akan menggunakan a Threaduntuk menjalankan a Task. (Dalam. NET, utas sangat mahal, jadi Anda umumnya ingin menghindarinya sebanyak mungkin dan benar-benar hanya menggunakannya jika Anda ingin menjalankan banyak perhitungan berat pada banyak CPU. Misalnya, di Windows, utas berbobot 12 KiByte ( Saya pikir), di Linux, utas berbobot hanya 4 KiByte, di Erlang / BEAM bahkan hanya 400 Byte. Dalam .NET, ini 1 MiByte!)