C#で作ったソフトを終了するとき、無数に作ったタスクどもをアボートしてから終了するんだけど、
その途中で
「セーフハンドルが閉じられていません」
という例外が出ていた。
デバック実行では出ないし、ヘルプを見ても何が悪いのかサッパリ。
色々色々と試行錯誤して、ようやく原因が分かった。
どうやら、タスクをアボートするタイミングに問題があるみたい。
タスクはスリープありの無限ループしてるんだけど、これを抜けさせた後でアボートするようにしたら、
例外が起きなくなった。
アボートは、タスクがRunning状態の時にこれをコールしても、即終了するわけではなく、
タスク切り替えタイミングまでは、動き続けるみたい。
その間に、既になくなっている別タスクの資源にアクセスした場合に、上記例外になる予感。
ほとんど想像だけど。
全部のタスクにこんな事せなあかんのか...タスク何十個もあるのに。ひー。
ってか正確に言うと、タスクじゃなくてスレッドですな。
違いは知らないけど。
トラックバック
トラックバックURL: