AFAIK, यह सब जानता है कि कुछ बिंदु पर, इसकी संपत्ति के माध्यम से इसका पूरा करने के लिए इसकी विधि SetResult
या SetException
विधि कहा जा रहा है।Task<T>
Task
दूसरे शब्दों में, यह एक Task<TResult>
और इसके पूरा होने के लिए निर्माता के रूप में कार्य करता है ।
मैंने यहाँ उदाहरण देखा :
अगर मुझे एसिंक्रोनस रूप से एक फंक को निष्पादित करने का एक तरीका चाहिए और उस ऑपरेशन का प्रतिनिधित्व करने के लिए एक टास्क है।
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;
}
जिसका उपयोग किया जा सकता है * यदि मेरे पास नहीं है Task.Factory.StartNew
- लेकिन मेरे पास है Task.Factory.StartNew
।
सवाल:
किसी उदाहरण से संबंधित एक परिदृश्य कृपया उसका वर्णन सीधे करने के लिए TaskCompletionSource
एक के लिए नहीं है और काल्पनिक है, जिसमें मेरे पास नहीं है स्थिति Task.Factory.StartNew
?