投稿者 とくま  (社会人) 投稿日時 2023/11/16 15:52:05
非同期処理のプログラム自体は、文法に決まりごとが多いし、あっちこっちに処理が飛んだように見えて
難易度高いようにも思うけど、なぜ非同期処理処理が必要なのか?そして有効な場面は?みたいな話は
難しくないと思うのだが。
コードから学んで分かりやすいものも無いとは言わないけど、目的が不明なまま公式だけ理解するのは
順番が逆なのでは?

新規プロジェクトでフォームだけのプログラムを実行したとき、フォームは何をしていますか?
何もしていないとも言えるし、ユーザやOSの命令や連絡(ウィンドウがドラッグされて場所が移動した
とか、上にかぶっていたメモ帳のウィンドウが終了してアクティブウィンドウになったよとか)を「待つ」
ということをしてるとも言える。

よく別スレッドに処理を投げたいと思うのは、画面が重い、固まるとき。どうしてこんな現象が起こるのか?
OSから自ウィンドウがドラッグされたよって情報が来ても、フォームを動いた先の場所に描く処理を実行する
暇がないから。なんで暇がないのか?ひとつ前に押されたボタンの処理で、数億件のデータを計算する処理が
実行されてて、それに30分掛かるから。その仕事を別の人に丸投げできれば、自分は次の処理の受付ができる。
会社で受付の人が、一人目のお客さんの相手を帰るまで担当したら、二人目のお客さんは一人目が帰るまで
待たされる。受付だけして「担当者に代わります」とすれば二人目をすぐ受け付けられる。フォーム画面は
常にユーザの命令を受け付けるために「待つ」をしているのが良い状態なのは当然のこと。

ただ非同期の処理を採用してても、同期をとる必要がある瞬間はある。同期が必要なのは順番がある処理。
ファイルをダウンロードして読み込む処理では、ダウンロード途中のファイルを読んだら途中までのデータ
しか読めない。ダウンロードが終わった後に次の処理を実行する必要がある、同期処理、いわゆる順次処理。
同じファイルのダウンロードでも、社員情報と組織情報のファイルをそれぞれダウンロードする場合は?
どっちから始めても良いし、どちらかの処理が終わるのを待つ必要が無い、同時に実行して良い、非同期処理。
同じプログラムの、同じ処理の中に、同期と非同期は混ざっていても不思議はない。

ここでダウンロードプログラムの一部だけ切り出して、同期をとる場面なのか判断できるのか?全体の流れを
把握しないと、どっちが正解の場合もある。。。もしかしたら今あるプログラムコードが間違ってる可能性も
ある状態で、理解しようとしても意味が無いかもしれない。

>クラスのメソッドとして、非同期メソッドが出てくるのですが、いまいち動作が分かりません。
動作自体はConsole.WriteLineとかでデバッグログ仕込めば、動いたまま出てくるのでは?動いたままが
プログラムなんだから、分からないとか無いから。ちゃんとデバッグ作業してください。