2013-10-01 6 views
5

मैं धागे का उपयोग कर ui को अनवरोधित करना चाहता हूं।कार्य और उपयोगकर्ता इंटरफ़ेस को अनवरोधित करें

आप मुझे बता सकते हैं क्या इस कोड के बीच अंतर है:

private async void button1_Click(object sender, EventArgs e) 
{ 
    int result = await Calculate(1, 2); 

    label1.Text = result.ToString(); 
} 

private async Task<int> Calculate(int number1, int number2) 
{ 
    return await Task.Run(() => 
    { 
     Thread.Sleep(5000); 
     return number1 + number2; 
    }); 
} 

और यह कोड:

private async void button1_Click(object sender, EventArgs e) 
{ 
    int result = await Calculate(1, 2); 

    label1.Text = result.ToString(); 
} 

private async Task<int> Calculate(int number1, int number2) 
{ 
    await Task.Delay(5000); 
    return number1 + number2; 
} 
+0

[थ्रेड स्लीप बनाम कार्य। डेले?] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/17258428/thread-sleep-vs-task-delay) – Muctadir

उत्तर

2

मुख्य अंतर यह है कि Task.Run एक नया धागा (this MSDN documentation का उल्लेख बनाता है थ्रेड अनुभाग)।
तो नया थ्रेड पहले मामले में 5 सेकंड के लिए ब्लॉक बनाया और उसके बाद परिणाम देता है (इस बीच, मुख्य थ्रेड उपयोग के लिए उपलब्ध है, तो रिटर्न Task.Run(...) से फोन करने वाले के लिए नियंत्रण वापस इंतजार)

दूसरे में मामले भी, प्रतीक्षा के बाद, नियंत्रण कॉलर और कार्य में स्थानांतरित कर दिया जाता है। मुख्य धागे में डेले चल रहा है। कोई नया धागा नहीं बनाया गया है।

तो जैसा कि आपने प्रश्न में उल्लेख किया है, यदि आप Task.Run()async और await के साथ बहु-थ्रेडिंग के लिए जाना चाहते हैं, तो आपको कई संभावनाएं मिलेंगी।

async और await नियंत्रण प्रवाह पर अधिक जानकारी के लिए, उपर्युक्त दस्तावेज देखें। यह एक बहुत ही उपयोगी और विस्तृत एमएसडीएन पढ़ा है!

संबंधित मुद्दे