Ich folgte ein Beispiel aus C# in Kürze. Laut dem Text soll der folgende Code nicht blockierend sein, aber ich finde, dass das Formular nicht angezeigt wird, bis die 5 Sekunden vergangen sind.Thread blockiert die UI
private void Form1_Load(object sender, EventArgs e)
{
var tcs = new TaskCompletionSource<int>();
new Thread(() => {Thread.Sleep(5000); tcs.SetResult(42); }).Start();
Task<int> task = tcs.Task;
MessageBox.Show(task.Result.ToString());
}
Ich habe das Gefühl, es ist etwas mit Thread.Sleep() zu tun und statt den neuen Thread zu schlafen setzen, es ist der Hauptthread einzuschläfern.
Warum blockiert es den UI-Thread?
Aber Sie verwenden Ergebnis der Aufgabe direkt nach dem Einführen, so wird es warten, bis Ergebnis bereit .. – adt
Sie sollten 'Task.Delay' verwenden, um eine Aufgabe zu erhalten, die in X Millisekunden statt dieser Methode abgeschlossen wird ist mehr Arbeit und schafft auch eine ganz neue Aufgabe, nur um dort sitzen zu bleiben und nichts zu tun (was ziemlich teuer ist). – Servy
@Servy, gibt 'Task.Delay()' auch keine brandneue 'Task' zurück, die nur dort sitzt und nichts tut (wenn auch nicht auf einem neuen Thread)? –