[解決済み] ロックされたオブジェクトは、その内部で例外が発生してもロックされたままになりますか?
2023-03-19 22:21:34
質問
c#のスレッドアプリで、オブジェクトをロックする場合、例えばキューをロックして、例外が発生した場合、オブジェクトはロックされたままでしょうか? 以下は擬似コードです。
int ii;
lock(MyQueue)
{
MyClass LclClass = (MyClass)MyQueue.Dequeue();
try
{
ii = int.parse(LclClass.SomeString);
}
catch
{
MessageBox.Show("Error parsing string");
}
}
私の理解では、catchの後のコードは実行されません - しかし、私はロックが解放されるかどうか疑問に思っています。
どのように解決するのでしょうか?
まず、TryParseを検討しましたか?
in li;
if(int.TryParse(LclClass.SomeString, out li)) {
// li is now assigned
} else {
// input string is dodgy
}
ロックが解除される理由は2つあり、1つ目は
lock
は本質的に
Monitor.Enter(lockObj);
try {
// ...
} finally {
Monitor.Exit(lockObj);
}
次に、内部の例外をキャッチして再スローしないので
lock
は実際に例外を見ることはありません。もちろん、MessageBox の期間中はロックを保持することになるので、問題になるかもしれません。
ですから、致命的な大惨事の回復不可能な例外を除いて、すべてで解放されます。
関連
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】.NETにゾンビは存在するのか......?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015