Du kunne jo bruge en Monitor, der kan du sætte timeout for at undgå dead locks.
http://msdn.microsoft.com/en-us/library/de0542zz.aspxMen udover det så synes jeg det er dårlig stil at lade din lock styres udefra!
imho må du ikke bruge callers til at ændre din lock, den skal sættes i klassen af den metode som anvender den. Hvis du er afhængig af at flere kaldere udfører noget som kan gå galt og det er årsagen til din åbne lock, skal du arbejde med transactions.
Anyway... dit statement bør skrives som:
....
static object syncHandle = new object();
public int StartNumber
{
get{
lock(syncHandle)
return startNumber;
}
}
if (!Monitor.TryEnter(syncHandle, 1000)) // vent 1 sekund
throw new someexcpetion....
("Could not increment..");
try
{
startNumber++;
}
finally
{
Monitor.Exit(syncHandle);
}
Ja jeg formoder din klasse skal give startnummeret og lægge 1 til? Ellers må du beskrive mere præcist hvad du vil :)