1/10/2007 7:28:00 AM

Работаю с Enterprise Library, CAB и, в частности, с EventBroker уже почти год.
Всегда считал, что при работе с событиями через этот самый EventBroker происходит вызов подписчиков по порядку в цикле, причем если какой-то из подписчиков генерирует исключение, то EventBroker его перехватывает и вместо него кидает свое. Дескать, обработка события такого-то не прошла, получите и распишитесь.
Свойство InnerException оставалось нетронутым, то есть, равным null, что меня всегда раздражало: ну, получил, расписался, а в чем, собственно дело? Смысла в информации о том, что где-то сорвался какой-то из подписчиков не много, если не знаешь где и какой.

И вот сегодня для меня открылось сокральное знание великим методом "блин, щас посмотрю как это сделано и приделаю то, что мне нужно нафиг".

Оказывается, перебор подписчиков EventBroker действительно осуществляет в цикле и действительно перехватывает все исключения от всех подписчиков.
Но при этом он не прерывает цикл, а бережно складывает все полученные исключения в списочек и продолжает вызывать подписчиков.
После того, как подписчики кончились, он проверяет, а не пуст ли списочек исключений? Если он не пуст, то EventBroker действительно генерирует свое, новое (EventTopicException) исключение. Он действительно не заполняет свойство InnerException, так, как это просто не имеет смысла: если в списке находится более одного исключения, то какое выбрать в качестве InnerException?
Вместо этого класс EventTopicException имеет свойство Exceptions, которое содержит список всех исключений, произошедших во время обработки сообщения.

Вот так все просто. Примерно то, что хотел приделать к EventBroker'у я :)

Чувствую себя идиотом :)

P.S. Надо было писать этот пост с умным видом в тоне наставления, типа "для того, чтобы получить то-то надо посмотреть туда-то" :-) Опять стормозил ;)

 

Technorati tags: , , ,

Tags:

Comments (6) -

1/11/2007 6:31:35 PM

void

Как тебе CAB? Нравится? По мне так он достаточно тормозной со всеми этими BuildUp и TearDown, да еще и постоянной рефлексией в поисках атрибутов. А еще и баги встречаются.

void

1/13/2007 1:43:52 AM

По мне - нормально. Багов серьезных я пока не видел (кстати, напиши если что нашел).
Да, немного тормознее, видимо, но вроде как не существенно, не заметно именно вот кабовских тармозов. ГУИ - да, тормозит, но это уж дотнет...
Да и то в релизе и без вижлстудии нормально работает.
А что касается рефлексии.. Так единожды отрефлексенный тип не рефлексится ��олее, ибо таблицы метаданных создаются и все такое.
Фреймворк 2.0 хоть научился эти метаданные из памяти грохать, когда не нужны, а 1.1 и этого не делал - болтались и жрали память пока приложение не закроешь. Ну и скорость рефлексии в 2.0 тоже повыше, чем в 1.1..

Alexey Raga

1/15/2007 7:22:13 PM

void

Про баги я уже точно не помню. Был один, связанный с Popup-окнами. При закрытии окна крестиком закрывалось view, а форма оставалась пустой и незакрытой Smile
Тормозили на самом деле больше контролы типа гридов и табов.

void

1/16/2007 11:39:09 PM

kastex

>Так единожды отрефлексенный тип не рефлексится более, ибо таблицы метаданных создаются и все такое.
точно ?
тормозило до офигения, пока все FieldInfo и PropertyInfo в обычный кеш не положили.

kastex

1/16/2007 11:42:11 PM

kastex

ps
а по поводу этих эксепшенов я тоже ковырялся - но сделал так, что если исключение есть (оно как правило только доно происходит в 99%), то InnerExecption заполнять из Exceptions[0]. Просто привычней работать с InnerExxeption.

kastex

1/18/2007 6:41:53 PM

>>При закрытии окна крестиком закрывалось view, а форма оставалась пустой и незакрытой Smile
При работе со стандартным WindowWorkspace такого не возникает Smile Подсовываю я ему контрол, форму он сам делает, все нормально закрывается, у меня несколько таких.

>>тормозило до офигения, пока все FieldInfo и PropertyInfo в обычный кеш не положили.
Странно. Очень странно. Хотя, конечно, надо видеть задачу, но в Энтерпрайз Лайбрари тормозов с рефлекшном точно нет (если верить профайлеру).

Alexey Raga

Comments are closed

Powered by BlogEngine.NET 2.5.0.6

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter

Widget Twitter not found.

Root element is missing.X


Recent posts

Archive

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

Sign in