はい、可能性があります:
- スレッド1の実行
Threading.Interlocked.Increment(hitCount)
- スレッド2の実行
Threading.Interlocked.Increment(hitCount)
- スレッド1の実行
Return hitCount
- スレッド2の実行
Return hitCount
手順3と4では、hitCountは同じ値になります。
ただし、修正は簡単です。Interlocked.Incrementはインクリメントされた値を返すため、コードを次のように変更するだけです。
Private Shared hitCount As Long = 1L
Public Shared Function GetIt() As Long
Return Threading.Interlocked.Increment(hitCount)
End Function
編集
または今あなたの編集に基づいて、あなたはかなりのタイミングの穴があります。とにかく、これはあなたが望むものです:
Public Shared Function GetIt() As Long
Dim localHitCount As Long = Threading.Interlocked.Increment(hitCount)
Console.Writeline("Something, something....")
Return localHitCount
End Function
編集
次にこれを行います(これはまさにマイケルが以下に提案したことです)
Private Shared hitCount As Long = 1L
Public Shared Function GetIt() As Long
Dim localHitCount As Long = Threading.Interlocked.Increment(hitCount)
DoSomethingQuick(localHitCount )
Return localHitCount
End Function