2013-10-01 8 views
5

Ich möchte die UI mit Threads entsperren.Aufgabe und entsperren die Benutzeroberfläche

Können Sie mir sagen, was ist der Unterschied zwischen diesem Code:

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

Und dieser Code:

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

mögliches Duplikat von [Thread.Sleep vs. Task.Delay?] (Http://stackoverflow.com/questions/17258428/thread-sleep-vs-task-delay) – Muctadir

Antwort

2

Der wesentliche Unterschied besteht darin, dass Task.Run einen neuen Thread erstellt (siehe this MSDN documentation Abschnitt "Threads").
So ist der neue Thread erstellt Blöcke für 5 Sekunden im ersten Fall und gibt dann das Ergebnis (Inzwischen ist der Haupt-Thread für die Verwendung zur Verfügung steht, so await kehrt die Steuerung an den Aufrufer von Task.Run(...) hinten)

Im zweiten Auch nach dem Warten wird die Kontrolle an den Aufrufer übergeben und die Task.Delay läuft im Hauptthread ab. Kein neuer Thread wird erstellt.

So wie Sie in der Frage erwähnt, wenn Sie für Multi-Threading gehen möchten, gibt Task.Run() zusammen mit async und await Ihnen eine Vielzahl von Möglichkeiten.

Weitere Details zu async und await Kontrollfluss finden Sie in der oben genannten Dokumentation. Es ist eine sehr hilfreiche und detaillierte MSDN lesen!