読者です 読者をやめる 読者になる 読者になる

IAsyncResult

IAsyncResultを使って、実行している非同期処理の状態を取得できる・・・。

IAsyncResult インターフェイス (System)

今回は、IAsyncResult.IsCompletedで非同期処理が完了しているかを1秒毎に確認する・・・。

今回は、引数も戻り値もないAsyncronousFuncDelegateに戻す・・・。
BeginInvokeで非同期処理を実行し、IAsyncResultインターフェイスとしてiarを取得・・・。

AsyncronousFuncは、

"AsyncronousFunc(i)"の出力に戻す・・・。

Main側では、

非同期処理の完了を表すiar.IsCompletedがfalseの間は、"AsyncronousFunc Running..."と出力して1秒休止を繰り返す・・・。
非同期処理が完了してtrueになればここを抜ける・・・。

すでに非同期処理は完了しているので、asyncronousFunc.EndInvokeはすぐ終わる・・・。

最後に"Finish!"と出力・・・。

AsyncronousFunc Running...
AsyncronousFunc(1)
AsyncronousFunc Running...
AsyncronousFunc(2)
AsyncronousFunc Running...
AsyncronousFunc(3)
AsyncronousFunc Running...
AsyncronousFunc(4)
AsyncronousFunc Running...
AsyncronousFunc(5)
AsyncronousFunc Running...
Finish!
続行するには何かキーを押してください . . .

このように、"AsyncronousFunc(5)"までいったら完了なので、"Finish!"で終わっている・・・。
("AsyncronousFunc(5)"のあと"AsyncronousFunc Running..."を出すだけの隙間時間はあるが・・・。)

Sample/dotnet/IAsyncResult/IAsyncResult/src/IAsyncResult_ at master · bg1bgst333/Sample · GitHub