मेरे पास डेटाबेस से उत्पादों को प्राप्त करने का कार्य है, और ContinueWith
कार्रवाई जो कुछ यूआई संशोधन संचालित करती है, इसलिए मुझे एक समस्या थी क्योंकि कार्य एक नया धागा बनाते थे, और UI संशोधन को यूआई थ्रेड में निष्पादित नहीं किया गया था।टास्कशेड्यूलर। वर्तमान और कार्यस्केल्डर। फ्रॉमकंटेंट सिंक्रनाइज़ेशन कॉन्टेक्स्ट() अंतर?
मैं इसे ठीक उपयोग करने का प्रयास:
var currentScheduler = TaskScheduler.Current;
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), currentScheduler);
लेकिन यह बिल्कुल भी काम नहीं किया। मैं जांच करता हूं और ContinueWith
को मौजूदा शेड्यूलर से थ्रेड में निष्पादित नहीं किया गया था लेकिन एक दूसरे में।
मैं इस विधि की खोज की:
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), TaskScheduler.FromCurrentSynchronizationContext());
और यह काम करता है। तो मतभेद क्या है? मेरा पहला कोड क्यों काम नहीं किया? धन्यवाद!
यह उपयोगी है जब आप UI घटक के निर्माता में async/await का उपयोग नहीं कर सकते हैं, है ना? – Chin
@Chin: मैं इसके लिए विशेष रूप से इसका उपयोग नहीं करता - मुझे आमतौर पर एक स्थिर एसिंक विधि होती है जो काम करता है और फिर त्वरित कन्स्ट्रक्टर कहता है। –
क्या आप उस पर थोड़ा और विस्तार कर सकते हैं? विशेष रूप से मेरे यहां एक और सवाल है: http://stackoverflow.com/questions/31886276/handle-exception-when-using-task-run-in-ui-constructor जो कि – Chin