想象一下,我有一个按钮单击事件处理程序,例如:
public async void btn_Click(...)
{
await longRunningOperationAsync();
x += 2;
}
public async void btn2_Click(...)
{
await longRunningOperationAsync();
x += 3;
}
如果用户点击 btn 后立即点击 btn2,是否会导致数据争用?await 之后的语句将在单线程 (UI) 中并发执行(例如抢占),对吧?
但是,我在那个网站上读到了这个:“你所有的代码都在 UI 线程中运行,所以你没有 UI 更新的问题。此外,你的代码都没有同时运行,这消除了数据完整性通常与并发相关的问题(死锁、竞争条件)。” http://www.techrepublic.com/blog/software-engineer/why-net-developers-should-check-out-the-await-system/
我基本上不明白会发生什么。