为什么验证事件处理程序不能与 async/await (C#) 一起使用?

Why Validating event handler cannot be used with async/await (C#)?

A 有一个简单的文本框,我在验证处理程序中等待延迟任务。 Validated 处理程序总是被调用,与我是否有 e.Cancel = true 无关!请注意,如果我省略 await 调用,则会按预期进行验证。为什么会这样?

private async void textBox1_Validating(object sender, CancelEventArgs e)
{
    await Task.Delay(2000);

    e.Cancel = true;
}

private void textBox1_Validated(object sender, EventArgs e)
{
    MessageBox.Show("THIS WILL ALWAYS BE CALLED!");
}

触发事件的代码将在事件完成调用所有事件处理程序后立即检查 e.Cancel 的值。由于您的代码最终从事件处理程序返回,然后在更晚的时间点 更改 e.Cancel 的值,因此触发事件处理程序的代码已经很久了完成检查 e.Cancel 并在您更改值时确定验证是否成功。