一言で言えば、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 スレッドをブロックしているのはなぜですか?