async and await:uraveling sinchronousプログラミング
最新のプログラミングは、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
の間の相互作用を習得することは、効率的でスケーラブルな非同期コードを作成するために不可欠です。 このメカニズムにより、メインスレッドをブロックせずに長期にわたる操作が可能になり、より応答性が高く流動的なユーザーエクスペリエンスが発生します。
以上が「async」と「await」は、非同期プログラミングで背景スレッドを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。