どうも、みつです。
なんとなくで非同期処理書いてると原因不明の不具合とか起きちゃって困ったりするよね。
今回はメソッドをタスクから発火したときに途中で処理が終わっちゃってめちょ詰まったときのその原因とかの話。
結局非同期処理への理解が薄かった
Invoke使ってメインスレッドでメソッドを実行したら動いた。
今回のタスクは、要素の状態をWhileループで監視して特定状態になったらメソッドを実行して終了するタスクだった。このメソッドが非同期だったから、タスクのスレッドの子スレッドとしてメソッドが実行される→タスクが終了してタスクのスレッドが終了する→子スレッドも閉じてメソッドが中断って流れになってしまったと思う。
今後の対策
まぁ当然のことではあるけど、非同期処理を実装するならどのスレッドでどの処理が行わてるのか認識しておくことが大切。
非同期処理の内容が単純だったり、非同期処理の中では同期処理しかしないときは認識しなくても簡単に動作する。でもこれを把握しておかないと、デバッガとかに引っかからない実行時エラーとかでどん詰まりするから気をつけておきたい。
まとめ
結局感覚で開発してるとこういうことあるから、できるだけ本なりなんなり読んで知識を体系的にしておくことって大切だなって思いました。
最近受けた面接とかでも、知識面での不足めちゃくちゃ感じたから、今作ってるソフト形になったら使用技術の技術書読まないとなぁ
コメント