lock
ステートメントとスレッド同期に関連するエラーと警告
lock
ステートメントとスレッド同期に関連し、いくつかのエラーがあります。
- CS0185: 'type' は lock ステートメントによって要求された参照型ではありません。
- CS1996: lock ステートメントの本体で待機することはできません
- CS9217: 'System.Threading.Lock' 型の値の lock ステートメントは、非同期メソッドでも非同期ラムダ式でも使用できません。
さらに、コンパイラによって、lock
ステートメントとスレッドの同期に関連する次の警告が生成される場合があります。
- CS9216: 別の型に変換された型
System.Threading.Lock
の値では、意図しないモニター ベースのロックがlock
ステートメントで使用される可能性があります。
lock ステートメント エラー
- CS0185: 'type' は lock ステートメントによって要求された参照型ではありません。
- CS1996: lock ステートメントの本体で待機することはできません
- CS9217: 'System.Threading.Lock' 型の値の lock ステートメントは、非同期メソッドでも非同期ラムダ式でも使用できません。
これらのエラーは、コードが lock
ステートメントに関する規則に違反していることを示しています。
lock
対象のオブジェクトは、参照型である必要があります。 値の型は使用できません。await
式は、lock
ステートメントのスコープでは使用できません。lock
ステートメントは、async
メソッドまたはラムダ式では使用できません。 このエラーでは、ロックされているオブジェクトの種類を別の型に置き換えることができます。lock
ステートメントでは、Monitor API を使用します。
lock
ステートメントの規則に従ってコードを更新する必要があります。
lock の警告
- CS9216: 別の型に変換された型
System.Threading.Lock
の値では、意図しないモニター ベースのロックがlock
ステートメントで使用される可能性があります。
C# 13 以降では、ターゲット オブジェクトが System.Threading.Lock
オブジェクトである場合に、lock
によって特殊なコードが生成されます。 コンパイラは、Lock
オブジェクトの使用時にこの警告を生成しますが、コードはその型を別の型に変換します。 そのため、コンパイラは、Lock
型に固有のロック コードでなく、一般的なロック コードを生成します。 次に例を示します。
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
変数または式が、Lock
オブジェクトの型を表していることを確認する必要があります。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET