考虑下面的方法,例如:为什么新线程可以访问UI?
private async void F()
{
button.IsEnabled = false;
await Task.Delay(1000);
button.IsEnabled = true;
}
在这种情况下,开始在await
任何代码总是发生在另一个线程(编辑:错误的)这大概不应该访问到UI线程,类似于桌面应用程序。在类似的情况下,我记得有一个例外,如:
该应用程序调用了一个接口,该接口被编组为另一个线程。
但是,例如不引发任何异常。这是预期的吗?我可以可靠地编写这样的代码吗?在UI线程上运行
为了确定,不'Task.Delay'开始一个新的线程?我记得有人争论的SO上的一个线索。 – Avenicci
@Avenicci:没有。它只是启动一个计时器。我上次检查时,每个应用程序都有一个线程处理所有计时器。当定时器完成时,它的回调函数会在一个线程池线程上调用,该线程池非常简单地用于完成从Task.Delay返回的Task。但是没有创建新线程。 –
如果'Task.Delay'使用相同的线程,异步方法如何直接终止? – Avenicci