事情在非常重要的方面有所不同。
虽然底层线程模型确实是相同的,但您的问题通常与逻辑并发如何与 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 和线程时,他们正在考虑逻辑并发以及它如何影响编程模型。
总的来说,我认为异步范式转变是一件积极的事情。它需要稍微转变一下观点,但它与其他平台在客户端和服务器端的发展方式是一致的。