私は次の方法を持っています:
public bool ConnectAsync()
{
if (IsConnected)
throw new InvalidOperationException("Socket is already connected");
if (IsConnecting)
{
throw new InvalidOperationException("Attempt to connect in progress");
}
. . .
}
どこ:
private readonly object padLock = new object();
private bool isConnecting = false;
public bool IsConnected
{
get
{
lock (padLock)
{ return socket.Connected; }
}
}
public bool IsConnecting
{
get
{
lock (padLock)
{ return isConnecting; }
}
private set
{
lock (padLock)
{ isConnecting = value; }
}
}
変数 isConnecting が false の場合、if ステートメント内のコードが実行されるのはなぜですか?
編集:プロパティの代わりに
フィールドを使用すると、同じ動作になります。コードはどこでも同じスレッドで実行されます。isConnecting
IsConnecting
編集2:
最後にこれは機能します:
lock (padLock)
{
if (IsConnecting)
throw new InvalidOperationException("Attempt to connect in progress");
}
そして、これは機能します:
{
if (IsConnecting)
throw new InvalidOperationException("Attempt to connect in progress");
}
しかし、なぜ?