Сообщение Re[4]: Жизнь после Dispose (.net) от 08.07.2015 8:00
Изменено 08.07.2015 8:01 Sinix
Здравствуйте, ylem, Вы писали:
А, да на вопрос забыл ответить
В общем есть (условно) три сценария для Dispose()Ж
1. Scope. Всякие транзакции, потоки, unmanaged-ресурсы. В общем, любой объект, чей нормальный жизненный цикл завершается вызовом Dispose. Вот тут ObjectDisposedException в самый раз.
2. Reusable objects. Встречается гораздо реже, но всё-таки встречается. Dispose() эквивалентен вызову Close(), последующий Open() переводит объект в рабочее состояние.
3. LSD. Реализации, которые не следуют гадлайнам. Например, в Task.cs:
Ещё есть четвёртый вариант — т.н. toggle disposables. Это простые disposable взамен пары методов BeginSmth()/EndSmth(), т.е.
Выбирайте, что вам больше подходит, используйте на здоровье.
А, да на вопрос забыл ответить
В общем есть (условно) три сценария для Dispose()Ж
1. Scope. Всякие транзакции, потоки, unmanaged-ресурсы. В общем, любой объект, чей нормальный жизненный цикл завершается вызовом Dispose. Вот тут ObjectDisposedException в самый раз.
2. Reusable objects. Встречается гораздо реже, но всё-таки встречается. Dispose() эквивалентен вызову Close(), последующий Open() переводит объект в рабочее состояние.
3. LSD. Реализации, которые не следуют гадлайнам. Например, в Task.cs:
if ((Options & (TaskCreationOptions)InternalTaskOptions.DoNotDispose) != 0)
{
return;
}
if (!IsCompleted)
{
throw new InvalidOperationException(Environment.GetResourceString("Task_Dispose_NotCompleted"));
}
// ...
Но лучший сборник примеров — это безусловно Rx. Там есть всё.Ещё есть четвёртый вариант — т.н. toggle disposables. Это простые disposable взамен пары методов BeginSmth()/EndSmth(), т.е.
grid.BeginInit();
// ...
grid.EndInit();
// vs
using (grid.InitScope()) // NB: no var used
{
// ...
}
По сути, это те же disposable из п.1, только у них нет никаких публичных мемберов и ObjectDisposedException кидать нечем. Нет ручек — нет конфеткиВыбирайте, что вам больше подходит, используйте на здоровье.
Здравствуйте, ylem, Вы писали:
А, да на вопрос забыл ответить
В общем есть (условно) три сценария для Dispose()Ж
1. Scope. Всякие транзакции, потоки, unmanaged-ресурсы. В общем, любой объект, чей нормальный жизненный цикл завершается вызовом Dispose. Вот тут ObjectDisposedException в самый раз.
UPD. Как правило, исключение кидают только методы, содержащие поведение. Всякие геттеры/получение результата etc работают нормально.
2. Reusable objects. Встречается гораздо реже, но всё-таки встречается. Dispose() эквивалентен вызову Close(), последующий Open() переводит объект в рабочее состояние.
3. LSD. Реализации, которые не следуют гадлайнам. Например, в Task.cs:
Ещё есть четвёртый вариант — т.н. toggle disposables. Это простые disposable взамен пары методов BeginSmth()/EndSmth(), т.е.
Выбирайте, что вам больше подходит, используйте на здоровье.
А, да на вопрос забыл ответить
В общем есть (условно) три сценария для Dispose()Ж
1. Scope. Всякие транзакции, потоки, unmanaged-ресурсы. В общем, любой объект, чей нормальный жизненный цикл завершается вызовом Dispose. Вот тут ObjectDisposedException в самый раз.
UPD. Как правило, исключение кидают только методы, содержащие поведение. Всякие геттеры/получение результата etc работают нормально.
2. Reusable objects. Встречается гораздо реже, но всё-таки встречается. Dispose() эквивалентен вызову Close(), последующий Open() переводит объект в рабочее состояние.
3. LSD. Реализации, которые не следуют гадлайнам. Например, в Task.cs:
if ((Options & (TaskCreationOptions)InternalTaskOptions.DoNotDispose) != 0)
{
return;
}
if (!IsCompleted)
{
throw new InvalidOperationException(Environment.GetResourceString("Task_Dispose_NotCompleted"));
}
// ...
Но лучший сборник примеров — это безусловно Rx. Там есть всё.Ещё есть четвёртый вариант — т.н. toggle disposables. Это простые disposable взамен пары методов BeginSmth()/EndSmth(), т.е.
grid.BeginInit();
// ...
grid.EndInit();
// vs
using (grid.InitScope()) // NB: no var used
{
// ...
}
По сути, это те же disposable из п.1, только у них нет никаких публичных мемберов и ObjectDisposedException кидать нечем. Нет ручек — нет конфеткиВыбирайте, что вам больше подходит, используйте на здоровье.