【C# 非同期処理】async Task part1-1

NO IMAGE

今回はC#の非同期処理について解説,検証してみます.

非同期処理

非同期処理とは,あるタスクが実行している時,別のタスクが別の処理をすること.

図で書くとこんな感じ.

f:id:pokoshirou:20180926180233p:plain

一応説明してみると

非同期処理は,メインタスクの処理中に,サブタスクの処理を並行して処理する事ができる.

同期処理は,メインタスクの処理中に,サブタスクの処理が入ったら,サブタスクの処理が完了するまで,メインタスクの処理を待機させることになる.サブタスクの処理が完了後,メインタスクの処理が再開される.(従来のプログラミングと同じです.)

例えば、こんな事も考えられる.

「音楽を再生させる」という処理を実行する.

同期処理なら,音楽の再生が終わるまで何も処理を受け付けられない.

非同期処理なら,音楽の再生中でも処理を受け付ける事ができる.

(停止,早送り,巻き戻しなどの処理もできるようになるよね)

実装方法

始めに

同期メソッドと非同期メソッドについて整理します.

同期メソッド

恐らく一般的にメソッドというと同期メソッドの事を指してると思います.

一応書き方を説明すると,

※例えば

これはいつも通りですね

非同期メソッド

様々な書き方があるみたいですが,自分はこの書き方で書いています.

※戻り値がある場合は,

return文で値を返す.

※戻り値が無い場合は

async Task タスク名(仮引数)

となる.

非同期メソッドを作成するには,asyncという修飾子を付ける必要があります.

Taskは何なのかと言うと,処理の入れ物だと思って貰えればいいと思います.

Taskだけでは非同期処理をしません

書き方自体は同期メソッドと似ているので,慣れればそこまで難しくないはずです.

最初は,asyncTaskはセットで使うと考えましょう.
(冒頭でも書いたように他にも様々な書き方があります)

使用方法

実装方法について解説したので,どんな感じに使うのか検証していきましょう.

早速ですが,ソースコードを載せます

このプログラムでは,同期メソッド(Mainメソッド)から非同期メソッド(subTaskタスク)を呼び出しています.

非同期メソッドの呼び出し方は,

Task.Run(非同期メソッド名);

で呼び出す事ができます!

実行結果

f:id:pokoshirou:20180926193950p:plain

サブタスクの処理開始から完了までの間に,メインの処理もしていることが確認できました!

まとめ

基本的な使い方については解説できたんじゃないかと思います.

次回はawaitの使い方,SleepとDelayの違いなど,メソッドについて解説検証しようと思ってます!

まだまだ書き慣れないので,不備とかあると思いますが,コメントなどで指摘して頂けたら幸いです(´・ω・`)