मुझे संपत्तियों का एक गुच्छा मिला है, जिस पर मैं पढ़ने / लिखने के ताले का उपयोग करने जा रहा हूं। मैं उन्हें या तो 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();
}
}