半人前プログラマーの技術談議

開発した物と,C#を入門者向けに解説した記事を書いています!

【C# 非同期処理】様々なメソッド① part1-3

calendar

reload

こんにちは!シロウです!

今回は非同期処理の様々な機能について紹介していきます.

Wait

waitは指定したタスクの処理が終わるまで,待機するメソッドです.

例えばこんな事があります.

サブタスクの処理中に,メインタスクの処理が終わってしまったらどうなってしまうのか?

図にするとこんな感じです.

f:id:pokoshirou:20180927195932p:plain

では,早速検証していきたいと思います.

ソースコード

 

待機時間に注目しましょう.

サブタスクの待機時間の方が3秒長いです.

 

実行結果

f:id:pokoshirou:20180927200443p:plain

 

サブタスクの処理が最後まで完了していない状態で,メインタスクの処理が完了してしまい,プログラムが終了しています.

これを避ける為に,waitを使います.

使い方は,待機したい場所に指定したタスクのwaitメソッドを記述するだけでできます.

メインタスクの処理完了後,待機させる場合,以下のようになります.

 

ソースコード

 

実行結果

f:id:pokoshirou:20181004184638p:plain

 

メインタスクの処理完了後,サブタスクの処理が完了するまで待機しています.

 

Result

waitの機能に戻り値を取得するメソッドとして,Resultがあります.

使い方はwaitと同じで,戻り値があるものだと思って貰えればいいです.

 

ソースコード

 

少々わかりにくいと思いますが,Taskの戻り値を取得させる為に,サブタスクをTask<int>にしました.

 

実行結果

f:id:pokoshirou:20181004194124p:plain

 

値を取得してからメインタスクの処理を完了させて,プログラムを終了しています.

 

Thread.SleepとTask.Delay

Thread.Sleepについて,特に説明はしていませんが,

part1-1でも使っていたように,同期的にミリ秒単位で待機するメソッドです.

それに対してTask.Delayは,非同期的に待機します.

簡単に言ってしまえば,

これとやってる事と変わりないです.

awaitと組み合わせて使う事が多いかな?

 

 

今回はここまで!