我想知道为什么在以下情况下没有继续使用捕获的 GUI 上下文时会出现死锁。
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = true;
}
async Task DelayAsync()
{
// GUI context is captured here (right before the following await)
await Task.Delay(3000);//.ConfigureAwait(false);
// As no code follows the preceding await, there is no continuation that uses the captured GUI context.
}
private async void Button1_Click(object sender, EventArgs e)
{
Task t = DelayAsync();
t.Wait();
}
我知道僵局可以通过任何一种方式解决
使用await Task.Delay(3000).ConfigureAwait(false);
或
替换t.Wait();
为await t;
.
但这不是问题。问题是
为什么没有继续使用捕获的 GUI 上下文时会出现死锁?在我的心智模型中,如果有继续,那么它将使用捕获的 GUI 上下文,因此会导致死锁。
哆啦的时光机
相关分类