Di C # dan TPL ( Perpustakaan Tugas Paralel ), Task
kelas mewakili pekerjaan yang sedang berlangsung yang menghasilkan nilai tipe T.
Saya ingin tahu apa perlunya metode Task.FromResult ?
Yaitu: Dalam skenario di mana Anda sudah memiliki nilai yang dihasilkan, apa perlunya membungkusnya kembali menjadi Tugas?
Satu-satunya hal yang terlintas dalam pikiran adalah bahwa itu digunakan sebagai beberapa adaptor untuk metode lain menerima contoh Tugas.
c#
.net
task-parallel-library
task
async-await
asam lisergik
sumber
sumber
Jawaban:
Ada dua kasus penggunaan umum yang saya temukan:
sumber
Task.FromResult
dan klien yang menunggu secara tidak sinkron untuk I / O jaringan. Dengan cara ini Anda dapat berbagi antarmuka yang sama antara klien / server menggunakanChannelFactory
.IEnumerable<T>
berasal dariIDisposable
- memungkinkan enumerable untuk memiliki sumber daya sekali pakai, bukan memaksanya . BaikFromResult
,,async
juga tidakawait
akan menelurkan utas.Task
metode -mengembalikan berarti " mungkin tidak sinkron". Jadi kadang-kadang metode diberi tanda tangan asinkron yang sepenuhnya tahu bahwa beberapa implementasi akan sinkron (misalnya,NetworkStream
harus async, tetapiMemoryStream
harus disinkronkan).Salah satu contoh akan menjadi metode yang menggunakan cache. Jika hasilnya sudah dihitung, Anda bisa mengembalikan tugas yang selesai dengan nilai (menggunakan
Task.FromResult
). Jika tidak, maka Anda melanjutkan dan mengembalikan tugas yang mewakili pekerjaan yang sedang berlangsung.Contoh Cache: Contoh Cache menggunakan Task.FromResult untuk nilai yang dihitung sebelumnya
sumber
Task.FromResult
, bisa di-cache.Task.FromResult(0)
,Task.FromResult(1)
,Task.FromResult(false)
danTask.FromResult(true)
cache. Anda tidak seharusnya melakukan cache tugas untuk akses jaringan tetapi satu dari hasil sangat baik. Apakah Anda lebih suka membuatnya setiap kali Anda perlu mengembalikan nilainya?Gunakan saat Anda ingin membuat metode yang bisa ditunggu tanpa menggunakan kata kunci async. Saya menemukan contoh ini:
Di sini Anda membuat implementasi antarmuka IHttpActionResult Anda sendiri untuk digunakan dalam Aksi Web Api. Metode ExecuteAsync diharapkan asinkron tetapi Anda tidak harus menggunakan kata kunci async untuk menjadikannya tidak sinkron dan menunggu. Karena Anda sudah memiliki hasilnya dan tidak perlu menunggu apa pun, lebih baik menggunakan Task.Fromult.
sumber
Dari MSDN:
http://msdn.microsoft.com/en-us/library/hh228607.aspx
sumber
Gunakan Task.FromResult ketika Anda ingin memiliki operasi yang tidak sinkron tetapi terkadang hasilnya ada di tangan secara sinkron. Anda dapat menemukan contoh yang baik di sini http://msdn.microsoft.com/en-us/library/hh228607.aspx .
sumber
Task.FromResult
digunakan untuk mendapatkan hasil async yang sebelumnya di-cache.Saya berpendapat bahwa Anda dapat menggunakan Task.FromResult untuk metode yang sinkron yang membutuhkan waktu lama untuk diselesaikan sementara Anda dapat melakukan pekerjaan independen lainnya dalam kode Anda. Saya lebih suka membuat metode-metode untuk memanggil async. Tetapi bayangkan situasi di mana Anda tidak memiliki kendali atas kode yang dipanggil dan Anda ingin pemrosesan paralel implisit.
sumber