TaskCompletionSource<>
की आंतरिक कार्यप्रणाली के बारे में मुझे कुछ अस्पष्ट नहीं है।कार्यसंचार स्रोत के साथ कार्यप्रणाली विकल्प का उद्देश्य क्या है?
का उपयोग करते हुए एक साधारण Task<>
बनाते समय, मुझे उम्मीद है कि यह कार्य थ्रेड पूल में लगाया जाएगा, जब तक कि मैं TaskCreationOptions.LongRunning
निर्दिष्ट नहीं करता, जहां यह इसके बजाय एक नए धागे में चलाएगा।
TaskCompletionSource
की मेरी समझ, यह है कि जब कोई कार्य समाप्त होता है या विफल रहता है, तो मैं ट्रिगर करने के लिए ज़िम्मेदार हूं, और मेरे पास थ्रेड प्रबंधित करने के तरीके पर पूर्ण नियंत्रण है। हालांकि, TaskCompletionSource
का ctor मुझे TaskCreationOptions
निर्दिष्ट करने की अनुमति देता है, और यह मुझे भ्रमित करता है, क्योंकि मुझे Scheduler
कार्य को संभालने में सक्षम नहीं होने की उम्मीद थी।
के संदर्भ में TaskCreationOptions
का उद्देश्य क्या है?
public Task<WebResponse> Download(string url)
{
TaskCompletionSource<WebResponse> tcs =
new TaskCompletionSource<WebResponse>(TaskCreationOptions.LongRunning);
var client = (HttpWebRequest)HttpWebRequest.Create(url);
var async = client.BeginGetResponse(o =>
{
try
{
WebResponse resp = client.EndGetResponse(o);
tcs.SetResult(resp);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
return tcs.Task;
}
ठीक है, आप देख सकते हैं, जिसके परिणामस्वरूप कार्य के माध्यम से इस्तेमाल किया गया था, इसलिए मुझे लगता है कि यह संभव है कि कुछ कोड परिणाम के आधार पर एक टीसीएस या किसी कार्य से पारित किया जा सकता है और ऐसा कुछ है उन विकल्पों में से एक (कस्टम कोड जो इस कार्य को संसाधित कर रहा है) में से एक है। – Servy