为什么以下代码不起作用(意味着它永远不会到达MessageBox,说它已完成)?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
async Task SomeTask1()
{
await Task.Run(async () => await SomeTask2());
}
async Task SomeTask2()
{
var tb = new Button();
await Task.Delay(100);
}
private async void button1_Click(object sender, EventArgs e)
{
await SomeTask1();
MessageBox.Show("Done!");
}
}
这是来自真实系统中的实际代码的非常简化的repro代码。我知道我可以通过
来解决这个问题但是,我感兴趣为什么这不起作用,而不是如何解决它。是因为“new Button()”行会弄乱同步上下文吗?