AFAIK, yang diketahuinya adalah bahwa pada titik tertentu, metode SetResult
atau SetException
dipanggil untuk menyelesaikan Task<T>
eksposur melalui Task
propertinya.
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
?