J'ai un tas de propriétés qui je vais utiliser la lecture/écriture des verrous sur les. Je peux les mettre en œuvre, soit avec un essai enfin ou à l'aide de la clause. Dans le try enfin, je voudrais acquérir le verrou avant de l'essayer, et ralease dans le enfin. En utilisant l'article, je voudrais créer une classe qui acquiert le verrou dans son constructeur, et les rejets dans sa méthode dispose. Je suis à l'aide de lire/écrire les verrous dans beaucoup d'endroits, donc j'ai été à la recherche de moyens qui pourraient être plus concis que d'essayer enfin. Je suis intéressé à entendre quelques idées sur le pourquoi d'une façon peut-être pas recommandé, ou pourquoi on pourrait être meilleur qu'un autre.
Méthode 1 (essayez enfin):
static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public DateTime MyDateTime
{
get
{
rwlMyLock_m .AcquireReaderLock(0);
try
{
return dtMyDateTime_m
}
finally
{
rwlMyLock_m .ReleaseReaderLock();
}
}
set
{
rwlMyLock_m .AcquireWriterLock(0);
try
{
dtMyDateTime_m = value;
}
finally
{
rwlMyLock_m .ReleaseWriterLock();
}
}
}
Méthode 2:
static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public DateTime MyDateTime
{
get
{
using (new ReadLock(rwlMyLock_m))
{
return dtMyDateTime_m;
}
}
set
{
using (new WriteLock(rwlMyLock_m))
{
dtMyDateTime_m = value;
}
}
}
public class ReadLock : IDisposable
{
private ReaderWriterLock rwl;
public ReadLock(ReaderWriterLock rwl)
{
this.rwl = rwl;
rwl.AcquireReaderLock(0);
}
public void Dispose()
{
rwl.ReleaseReaderLock();
}
}
public class WriteLock : IDisposable
{
private ReaderWriterLock rwl;
public WriteLock(ReaderWriterLock rwl)
{
this.rwl = rwl;
rwl.AcquireWriterLock(0);
}
public void Dispose()
{
rwl.ReleaseWriterLock();
}
}