因此,我们不想进行同步等待,因为那样会阻塞UI线程,甚至可能导致死锁。
异步处理它的问题很简单,就是在您“准备就绪”之前将关闭表单。那可以解决;简单地取消关闭形式,如果异步任务尚未完成,然后关闭它再次“真正”的时候,任务 不
完成。
该方法看起来像这样(省略了错误处理):
void MainForm_FormClosing(object sender, FormClosingEventArgs e){ if (!_task.IsCompleted) { e.Cancel = true; _cts.Cancel(); _task.ContinueWith(t => Close(), TaskScheduler.FromCurrentSynchronizationContext()); }}请注意,为使错误处理更容易,您此时也可以使方法
async也可以,而不是使用显式延续。



