Open LeoAndo opened 3 years ago
XamarinのViewModelは特定のプラットフォームに依存する作りにすべきでないため、Xamarin.Forms固有のタイマー処理であるDevice.StartTimer(TimeSpan, Func) メソッド をViewModelで直接使うのは良い方法とは言えない。
なので、Task.Delayを使ってタイマー処理を行う方が良い。Task.Delayは.Netの一部でありこちらの方がはるかにプラットフォームから独立しているからです。
InfiniteLoop
メソッドが、通常のメソッドであるかのようにコンストラクターから呼び出されることに注目してください。
このメソッドにTask.Delay
ではなくThread.Sleep
を使用した場合は、いつまで経ってもコンストラクターに制御が戻らず、コンストラクターが終わらなくなってしまいます。このInfiniteLoop
メソッドは、await演算子を最初に検出した時点でコンストラクターに制御を戻すため、コンストラクターが実行を終了できます。
プログラムでは他の作業を実行できますが、InfiniteLoop
メソッドの実行が再開する250ミリ秒ごとにUIスレッドが要求されます。
Device.StartTimer(TimeSpan, Func) メソッド を使うパターン
https://github.com/LeoAndo/xamarin-forms-training/pull/24