async和等待:简化异步编程而不阻止UI
async
和await
是异步编程的强大工具,可改善代码的可读性和可维护性。 但是,它们的操作与传统背景线程有很大不同。让我们澄清他们的行为。
考虑此代码:
<code class="language-csharp">private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // Other UI-responsive tasks here int a = 1; // This executes immediately, not after the 5-second delay int x = await access; // Execution pauses here until DoSomethingAsync completes }</code>
async
关键字向编译器发出信号以生成状态计算机。该机器管理异步操作的生命周期。 access
>启动异步任务(DoSomethingAsync
)。 至关重要的是,因为DoSomethingAsync
使用await
,所以button1_Click
方法不会阻止UI线程。 // Other UI-responsive tasks here
段可以同时执行。
DoSomethingAsync
(未显示,但假定包含System.Threading.Thread.Sleep(5000)
)引入了5秒的延迟。 但是,await access
将控制回到呼叫者。 UI保持响应能力。 完成DoSomethingAsync
>完成时,线程池线程从关闭的位置恢复button1_Click
,将结果分配给x
>。
,Thread.Start()
和async
不创建新线程。相反,它们利用线程池和状态机有效地管理异步操作,防止UI冻结并启用并发执行。 这为异步编程提供了一种更清洁,更高效的方法。await
>
以上是``Async'和`等待如何在不阻止UI线程的情况下管理异步操作?的详细内容。更多信息请关注PHP中文网其他相关文章!