2013-03-13 26 views
6

के साथ समांतर कार्यों का निष्पादन करें मुझे सिल्वरलाइट में एकाधिक एसिंक कार्यों को निष्पादित करने की आवश्यकता है।async/await

3 पार्टी पैकेज राज्यों के प्रलेखन मैं

await Task.WhenAll() 

दुर्भाग्य से Silverlight का उपयोग केवल Task.WaitAll() हो सकता है और यह awaitable नहीं है। अगर मैं इसका उपयोग करने की कोशिश करता हूं तो मुझे डेडलॉक मिलता है (मुझे लगता है - क्योंकि पूरी चीज फ्रीज होती है)

एसिंक विधि में उपयोग करने के लिए उचित पैटर्न क्या है?

+0

यह दूसरी तरफ होना चाहिए। यह 'WaitAll' है जिसे Silverlight API से बाहर रखा जाना चाहिए और जब सभी को शामिल किया जाना चाहिए। क्या आपके पास .NET का उचित संस्करण स्थापित है? – Servy

+0

एफडब्ल्यूआईडब्ल्यू, मेरे स्टॉक एसएल 5 पर मैं केवल 'कार्य। प्रतीक्षा करें'; कोई कार्य नहीं है। जब भी मैं मानता हूं कि जब तक मैं कुछ तृतीय पक्ष लाइब्रेरी स्थापित नहीं करता हूं। –

उत्तर

10

सिल्वरलाइट के लिए मैं आप Microsoft.Bcl.Async पैकेज का उपयोग कर रहे मान।

चूंकि यह (ऐड-ऑन) पैकेज (अंतर्निर्मित) Task प्रकार को संशोधित नहीं कर सकता है, तो आपको TaskEx प्रकार में कुछ उपयोगी विधियां मिलेंगी। WhenAll सहित:

await TaskEx.WhenAll(...); 
1

मुझे लगता है कि यदि आप अपने प्रश्न को सही तरीके से समझते हैं तो आप समान व्यवहार करने के लिए TaskFactory.ContinueWhenAll का उपयोग करने का प्रयास कर सकते हैं। Example:

var task1 = Task.Factory.StartNew(() => 
{ 
    Thread.Sleep(1000); 
    return "dummy value 1"; 
}); 

var task2 = Task.Factory.StartNew(() => 
{ 
    Thread.Sleep(2000); 
    return "dummy value 2"; 
}); 

var task3 = Task.Factory.StartNew(() => 
{ 
    Thread.Sleep(3000); 
    return "dummy value 3"; 
}); 

Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks => 
{ 
    foreach (Task<string> task in tasks) 
    { 
     Console.WriteLine(task.Result); 
    } 
});