在相当重要的方面,事情是不同的。
虽然底层线程模型是相同的,但你的问题通常涉及逻辑并发如何与UI一起工作,就此而言,在Windows 8中开发人员看到的将是新的。
正如你提到的,大多数对话框以前都被阻止了。对于Metro应用程序,许多UI组件不会全部阻止。还记得WinRT异步吗?它也适用于UI组件。
例如,这个.NET 4代码不一定会因为UI调用在Show上阻塞而杀死你的硬盘(C#示例):
bool formatHardDrive = true;
if (MessageBox.Show("Format your harddrive?") == NO)
formatHardDrive = false;
if (formatHardDrive == true)
Format();
随着Windows 8 Metro的推出,许多UI组件如Windows.UI.Popups.MessageDialog默认情况下是异步的,因此Show调用会立即(逻辑上)执行到代码的下一行,而不会等待用户输入。
当然,基于await/promise设计模式有一个优雅的解决方案(JavaScript示例):
var md = Windows.UI.Popups.MessageDialog("Hello World!");
md.showAsync().then(function (command) {
console.log("pressed: " + command.label); });
重点在于,虽然线程模型不会改变,但当大多数人提到UI和线程时,他们考虑的是逻辑并发性以及它如何影响编程模型。
总体而言,我认为异步范式转变是一件好事。它需要一些视角上的转变,但与客户端和服务器端上其他平台的演进方式保持一致。