2013-10-01 9 views
5

UI'nin thread'leri kullanarak blokajını kaldırmak istiyorum.görev ve kullanıcı arabiriminin blokajını kaldırın

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; 
    }); 
} 

Ve bu kod:

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

olası bir kopyası [Thread.Sleep vs Task.Delay?] (Http://stackoverflow.com/questions/17258428/thread-sleep-vs-task-delay) – Muctadir

cevap

2

temel fark Task.Run yeni bir iş parçacığı (this MSDN documentation bakınız yaratmasıdır

bu kodu arasındaki farkın ne söyler misiniz Konular bölümü).
Yani yeni iplik birinci durumda 5 saniye boyunca blokları oluşturulur ve sonra (Bu arada, ana iş parçacığı kullanım için mevcuttur, bu nedenle döner Task.Run(...) gelen arayana kontrolünü geri bekliyor verisimi) İkincisinde

sonuç döndürür da bekledikten sonra, kontrol arayan kişiye aktarılır ve Task.Delay ana iş parçacığında devam eder. Yeni iş parçacığı oluşturulmadı. size çok sayıda olasılık verecek async ve await birlikte Task.Run() kullanarak, çoklu iş parçacığı için gitmek isterseniz

Yani, söz konusu belirtildiği gibi.

async ve await kontrol akışı hakkında daha fazla bilgi için, yukarıda belirtilen belgelere bakın. Onun çok yararlı ve ayrıntılı bir MSDN okuyun!

İlgili konular