I think a single use of the Write Lock is correct, as you are always doing a write. Try (
untested):
try
{
_RWLocker.EnterWriteLock();
long previousBankrol;
if (_GameSessionsBankroll.TryGetValue(gameSessionId, out previousBankrol))
{
_GameSessionsBankroll[gameSessionId] = previousBankrol - amount;
}
else
{
_GameSessionsBankroll[gameSessionId] = amount;
}
}
finally
{
_RWLocker.ExitWriteLock();
}