私はC#の中の一例の例を辿っていました。テキストによると、次のコードはブロックされていないと思われますが、フォームが5秒経過するまで表示されません。スレッドをブロックするスレッド
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());
}
私はそれはのThread.sleep(とは何かだ感じています)、代わりにスリープ状態に新しいスレッドを置くこと、それはスリープ状態にメインスレッドを入れています。
なぜUIスレッドをブロックしていますか?
しかし、結果をすぐに使用しているので、結果が得られるまで待つことになります。 – adt
このメソッドではなく、Xミリ秒で完了するタスクを取得するには、Task.Delayを使用する必要があります。両方ともより多くの仕事をしており、そこに座って何もしない(全く高価な)全く新しい仕事を作り出しています。 – Servy
@Servy、 'Task.Delay()'はそこに単に置かれ、何もしません(新しいスレッドではないにもかかわらず)全く新しい 'Task'を返しますか? –