Оператор «использование» против «наконец-то попробуйте»C#

Место общения программистов C#
Ответить
Anonymous
 Оператор «использование» против «наконец-то попробуйте»

Сообщение Anonymous »

У меня есть несколько свойств, для которых я собираюсь использовать блокировки чтения/записи. Я могу реализовать их либо с помощью предложения tryfinally, либо с помощью предложения using.

В попытке наконец я получу блокировку перед попыткой и окончательным выпуском. В предложении using я бы создал класс, который получает блокировку в своем конструкторе и освобождает ее в методе Dispose.

Я использую read/ писать блокировки во многих местах, поэтому я искал способы, которые могли бы быть более краткими, чем попытка наконец. Мне интересно услышать некоторые идеи о том, почему один способ не рекомендуется или почему один может быть лучше другого.

Метод 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();
}
}


Подробнее здесь: https://stackoverflow.com/questions/278 ... ry-finally
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»