どうも~。こんばんは。
どこのテレビもワールドカップ一色ですね。
今日は久々にVBではまりました。
すっぽりと・・・。
ログ出力用のクラスを作ってたんですが・・・・。
普通にべたに
FileOpen
PrintLine
の流れでやってたわけなんですが、
いかんせん
「ファイル名または番号が正しくありません」
というエラーがでまくり・・・。
悩みに悩んで悩みぬいた結果、
PrintLineがスレッドセーフじゃない!!!!!!!!!!
おえええええええええええええええ。
まじでーーーーーーーーーー!
そうか。なるほど。デリゲートでマルチスレッド化しているメソッドから、
呼び出してしまってたわけですね。
うーむ。参った。
というわけで
StremWriterに変更。
StreamWriterはスレッドセーフの模様。
見事さっくさくに動きました。
正直自分なりにSyncLockなど使用して、スレッドセーフにしたはずだったんですが。。。。
また話が違ったみたいですね。
本来SyncLockなどはオブジェクト内の変数の不整合の回避などに使うらしい。
大きな勘違いでした。
PrintLineメソッド自体スレッドセーフじゃないと無理なのか~。
ということでおなじみ参考サイトは@IT
@IT:連載:.NETマルチスレッド・プログラミング入門 第3回 マルチスレッドでデータの不整合を防ぐための排他制御
デリゲートで余裕かましてたらこういうところで引っかかるんですね・・・。
普通のメソッドのように意識せず非同期デリゲートを扱ってた報いでしょうか(苦笑)
ではでは。またの機会に。