Привет всем.
Помогите разобраться чего происходит.
using(IDisposable obj = new AnyDispClass())
{
CallAsyncOperation(obj);
}
Поидее этот код должен работать так:
1. оздается обект
2. вызывается асинхронная операция (чегото делается долго в другом потоке)
3. (сразу после вызова асинхронной операции) Выходим из блока using и вызывается obj.Dispose();
Соответсвенно логически предположить что код внутри асинхронной операции должен матюкнуться при обращении к obj.
Странно.. но он не "матерится". Даже если я сделаю задержку в 1 минуту в коде и напишу GC.Collect() после блока using.
---
Вот сразу напрашивается вопрос когда же вызывается obj.Dispose()? Потому что кажется что он не вызывается (покрайней мере там где я этого ожидаю)... Как это работает?
Спасибо.
Вобщем я разобрался сам окончательно.
Выводы:
1. Все работает именно так, как я и ожидал.
2. Exception-ов небыло только потому что метод Dispose() ничего не делал такого после чего клас нельзя было импользовать (что странно, поскольку, IDispose наследуется для организации уничтожения ненужных (но ранее испельзуемых классом) unmanaged ресурсов)
3. И самое главное. Не пишите такой код

Вызывайте Dispose(), например, по завершению асинхронной операции.
Здравствуйте, xGOSx, Вы писали:
GOS>Вобщем я разобрался сам окончательно.
GOS>Выводы:
GOS>1. Все работает именно так, как я и ожидал.
GOS>2. Exception-ов небыло только потому что метод Dispose() ничего не делал такого после чего клас нельзя было импользовать (что странно, поскольку, IDispose наследуется для организации уничтожения ненужных (но ранее испельзуемых классом) unmanaged ресурсов)
GOS>3. И самое главное. Не пишите такой код
Вызывайте Dispose(), например, по завершению асинхронной операции.
Видимо просто асинхронная операция не юзала unmanaged ресурсов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>