Which is why originally WinRT had only asynchronous APIs (and Android as well), because Microsoft and Google both wanted to push developers to do the right thing and not code single threaded UIs.
On WinRT with how everything turned out with UWP, now as per Reunion reboot, they are supporting again both models, as that was one of the reasons why many devs did not jumped into UWP app model.
On the Android side, they eventually came up with WorkManager and Concurrent. Also for those in the Kotlin train, co-routines.
As for what best models, I use to like doing thread based stuff, but came to enjoy using good old processes instead.
Security and stability issues haven proven that having the process sandbox, with OS level IPC is a much better way to work with parallel/concurrency programming, and processes must not even run all on the same computer, so one can scale across the cluster as well.
On WinRT with how everything turned out with UWP, now as per Reunion reboot, they are supporting again both models, as that was one of the reasons why many devs did not jumped into UWP app model.
On the Android side, they eventually came up with WorkManager and Concurrent. Also for those in the Kotlin train, co-routines.
As for what best models, I use to like doing thread based stuff, but came to enjoy using good old processes instead.
Security and stability issues haven proven that having the process sandbox, with OS level IPC is a much better way to work with parallel/concurrency programming, and processes must not even run all on the same computer, so one can scale across the cluster as well.