मैं कुछ मैंने सोचा था कि के साथ .NET 4.5भागो दो async कार्यों और .NET में परिणामों को एकत्र 4.5
मैं दो लंबी चलने कार्यों को बंद सक्रिय करना चाहते हैं काम कर आसान होगा प्राप्त करने के लिए कुछ समय के लिए कोशिश कर रहा है एक ही समय में और
परिणाम सबसे अच्छा सी # 4.5 (RTM) जिस तरह से
निम्नलिखित कार्यों में में इकट्ठा लेकिन मैं इसे पसंद नहीं है क्योंकि:
- मैं
Sleep
चाहते एक async विधि ऐसा हो यहawait
ओथ कर सकता है er विधियों - यह सिर्फ
Task.Run()
- के साथ बेकार दिखता है मुझे नहीं लगता कि यह किसी भी नई भाषा सुविधाओं का भी उपयोग कर रहा है!
कार्य कोड:
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Task.Run(() => Sleep(5000));
var task2 = Task.Run(() => Sleep(3000));
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for a total of " + totalSlept + " ms");
}
private static int Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
Console.WriteLine("Sleeping for " + ms + " FINISHED");
return ms;
}
गैर काम कर कोड:
अद्यतन: यह वास्तव में काम करता है और यह करने के लिए सही तरीका है, समस्या सिर्फ Thread.Sleep
है
यह कोड काम नहीं करता है क्योंकि कैल एल से Sleep(5000)
तुरंत चलने वाले कार्य को शुरू करता है ताकि Sleep(1000)
इसे पूरा होने तक चलाया न जाए। यह सच है भले ही Sleep
async
है और मैं await
का उपयोग नहीं कर रहा हूं या बहुत जल्द .Result
पर कॉल कर रहा हूं।
मैंने सोचा कि शायद वहाँ एक रास्ता पाने के लिए एक गैर चल Task<T>
एक async
विधि को फोन करके तो मैं फिर दो कार्यों पर Start()
कह सकते हैं, लेकिन मैं एक async कॉल करने से एक Task<T>
पाने के लिए को समझ नहीं सकता तरीका।
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Sleep(5000); // blocks
var task2 = Sleep(1000);
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for " + totalSlept + " ms");
}
private static async Task<int> Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
return ms;
}
ध्यान दें: बनाने के लिए जाओ एक async विधि कोई फर्क नहीं –
ब्लॉक 'पर हो रहा है बनाता है task1.Result' 'var task1 = नींद (5000) 'पर नहीं है क्योंकि आपकी स्लीप विधि बिना प्रतीक्षा कीवर्ड है तुल्यकालिक। – Arvis