मुझे संपत्तियों का एक गुच्छा मिला है, जिस पर मैं पढ़ने / लिखने के ताले का उपयोग करने जा रहा हूं। मैं उन्हें या तो try finallyएक usingखंड के साथ लागू कर सकता हूं ।
में try finallyमैं ताला खोलने से पहले try, और में रिलीज होगा finally। में usingखंड, मैं एक वर्ग है जो अपने निर्माता में ताला प्राप्त कर लेता है, और उसके निपटान विधि में रिलीज पैदा करेगा।
मैं बहुत सारे स्थानों पर पढ़ने / लिखने के ताले का उपयोग कर रहा हूं, इसलिए मैं ऐसे तरीकों की तलाश कर रहा हूं जो इससे अधिक संक्षिप्त हो सकते हैं try finally। मुझे कुछ विचारों को सुनने में दिलचस्पी है कि क्यों एक तरीके की सिफारिश नहीं की जा सकती है, या एक दूसरे से बेहतर क्यों हो सकता है।
विधि 1 ( try finally):
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();
}
}
}
विधि 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();
}
}