AFAIK, yang diketahuinya adalah bahwa pada titik tertentu, metode SetResultatau SetExceptiondipanggil untuk menyelesaikan Task<T>eksposur melalui Taskpropertinya.
Dengan kata lain, ia bertindak sebagai produsen untuk Task<TResult>dan penyelesaiannya.
Saya melihat contohnya di sini :
Jika saya memerlukan cara untuk menjalankan Func asynchronous dan memiliki Tugas untuk mewakili operasi itu.
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
Yang dapat digunakan * jika saya tidak memiliki Task.Factory.StartNew- Tapi aku tidak memiliki Task.Factory.StartNew.
Pertanyaan:
Dapatkah seseorang tolong jelaskan dengan contoh skenario yang berhubungan langsung dengan TaskCompletionSource
dan bukan dengan situasi hipotetis di mana saya tidak punya Task.Factory.StartNew?