非同期プログラミングで
および理解async多くの開発者は、非同期プログラミングにおけるawait
およびの作業メカニズムについて混乱しています。それらの使用法の謎を理解するために、それらのメカニズムを調査し、それらの違いを示し、背景スレッドを生成します。
clarifining async
およびawait
使用法
あなたの例は、「button1_click」インシデントでのとasync
の使用を強調しています。このメソッドはが非常に重要であるとマークされていますが、これはバックグラウンドスレッドの生成と同じではありません。代わりに、非同期プログラミングでは、バックグラウンドでコンパイラが管理するステートマシンを使用します。 await
コードでは、「dosomethingasync()」を開始した後、コードはタスクに関連しない操作を実行し続けます。 「アクセス」変数は、最終的にタスクを保持します。 「Await Access」ステートメントに到達すると、コードは一時停止され、現在のスレッドがリリースされます。
async
あなたの仮定とは対照的に、「dosomethingasync()」はバックグラウンドスレッドで実行されません。現在のスレッドを使用して、休眠操作を開始します。完了後、状態マシンは実行を再開し、「button1_click」の実行を継続し続けることができます。 await
async
より包括的な非同期例
より明確な理解を提供するために、次の例を考えてください。
このシーンでは:
"mymethodasync()"は「longruningoperationasync()」を開始します。
エグゼクティブ独立した作業により、メインスレッドが続行できます。 「longrunningtaskを待っている」と遭遇すると、メインスレッドがサスペンションを解放して実行します。
「longrunningoperationasync()」が完了していない場合、スレッドプールのスレッドは「mymethodasync()」を復元し、タスクが完了した後も実行を継続します。
<code class="language-csharp">public async Task MyMethodAsync() { Task<int> longRunningTask = LongRunningOperationAsync(); // 这里可以进行独立的工作... // 等待长时间运行的任务 int result = await longRunningTask; // 使用结果... } public async Task<int> LongRunningOperationAsync() { await Task.Delay(1000); // 1秒延迟 return 1; }</code>「longrunningoperationasync()」が完了した場合、「mymethodasync()」は同じスレッドで実行され続けます。
以上が背景スレッドを産むことなく、「async」と「asyncプログラミング」で「待っている」とどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。