Проведя за последние 2,5 года множество WCF-сервисов и SOA-разработок, включая создание сервисов публикации-подписки на вызов, где один из ключевых принципов заключается в том, что разработчики должны стремиться строить чистые отношения клиент-сервер, где оба клиента не знают овнутренности службы ... они должны знать только, что интерфейс и службы не должны зависеть от конкретных клиентов или подробностей, это заставило меня задуматься о том, как это относится к собственной системе публикации-подписчика C #: обработчикам событий.На самом деле этот вопрос относится к любому сопоставимому языку.
Как я вижу, объекты, которые представляют события и затем вызывают эти события, ничем не отличаются от сервисов pub-sub в мире SOA.По сути, вызов событий в C # like - это «сервис», вызывающий метод одного из зависимых «клиентов».Когда мы создавали сервисы pub-sub в WCF, обратные вызовы к клиентам всегда выполнялись асинхронно (что не позволяло клиенту блокировать сервис), а любые ошибки, возникающие в результате взаимодействия или необработанные исключения на стороне клиента, были изолированы, опять же, чтобы защитить сервис от его клиентов.
Почему в .NET не практикуется также запускать события асинхронно и всегда обрабатывать (и глотать ???) исключения в обработчиках событий?В моем опыте код, где вызывающий событие зависит от успеха обработчика, является плохим дизайном ... вы должны вызывать методы для вещей, от которых вы зависите.Конечно, объекту, выставляющему событие, не важно, сколько времени занимают обработчики, чтобы выполнить свою работу ... или если они даже преуспели?
Обсудить!