异步和等待:拆开异步编程
>现代编程在很大程度上依赖于使用async
和await
的异步操作。 在提高代码可读性的同时,这些关键字引入了通常需要进一步解释的复杂性。 一个常见的误解是,async
和await
为冗长的过程创建新的背景线程。
现实更加细微。 async
和await
管理异步任务,但它们没有直接产生线程。 相反,他们利用了另一种方法。 编译器遇到async
方法时,编译器会在场景后面生成状态计算机。
让我们用一个示例说明:
<code class="language-csharp">private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // Other independent tasks here int a = 1; // Immediately accessible // Wait for the result of DoSomethingAsync() int x = await access; } async Task<int> DoSomethingAsync() { // Does this run on a background thread? System.Threading.Thread.Sleep(5000); return 1; }</code>
>在这里,await
>指示编译器暂停button1_Click
,直到DoSomethingAsync
完成为止。 任务完成后,执行恢复,允许立即访问a
>。
不在专用的背景线程上运行。 编译器的状态计算机在线程池线程上不同步。 这意味着未预定的执行环境;它可以在任何可用的线程池线程上运行。DoSomethingAsync
DoSomethingAsync
掌握
之间的相互作用对于创建有效,可扩展的异步代码至关重要。 这种机制允许长期运行的操作而不会阻止主线程,从而带来更快且流畅的用户体验。
以上是``async''和`等待在异步编程中创建背景线程吗?的详细内容。更多信息请关注PHP中文网其他相关文章!