Рекомендуется ли асинхронно вызывать все события, если - PullRequest
1 голос
/ 10 июня 2010

Рекомендуется ли вызывать все события асинхронно, если класс (объект, вызывающий события) НЕ интересуется тем, как параметры событий обрабатываются объектами клиента (получателями событий)?!

Пожалуйста, ведите меня?

Ответы [ 4 ]

5 голосов
/ 10 июня 2010

Нет, это не рекомендуемая практика.

Вы должны учитывать другие факторы, такие как:

  • Требования к родству потоков класса генерирования.
  • Включены ли элементы пользовательского интерфейса (изменение сродства потока)
  • Могут ли классы, отвечающие на события, принимать параллельную обработку в нескольких потоках (они же threadsafe ).
  • Вовлечены ли локальные данные потока (например, Thread.CurrentPrincipal, HttpContext и т. Д.)
  • Получаете ли вы что-нибудь от многопоточной обработки.

Многопоточность усложняет задачу. Асинхронная обработка событий требует многопоточности. Вы должны вносить сложности только в том случае, если он что-то покупает (например, улучшенная производительность, более быстрое взаимодействие с пользователем, упрощение чего-то еще, что будет еще более сложным).

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

1 голос
/ 10 июня 2010

Нет, это не так. Фактически, асинхронное возбуждение событий может привести к появлению множества новых проблем в вашей программе. Вы не должны этого делать, если у вас нет веских причин.

0 голосов
/ 11 июня 2010

Я хотел бы добавить несколько вещей в дополнение к великолепному ответу Л.Бушкина.

Другая проблема с этим подходом состоит в том, что вы собираетесь использовать установленный шаблон (события) и, по существу, без предупреждения пользователя изменить способ, которым в функциях.Это рецепт для запутывания пользователей и создания ошибок в их приложении.

Да, вы можете утверждать, что люди должны читать документацию.Но на самом деле, кто собирается прочитать документацию для стандартного события .Net, чтобы увидеть, происходит ли оно, как практически любое другое событие в среде .Net.Ответ не слишком много людей.

Говорить о плохой идее - это вообще плохая идея, если для этого нет веской причины.

0 голосов
/ 10 июня 2010

Нет, это не рекомендуемая практика. Все обычные предостережения применяются в том смысле, что вам необходимо убедиться, что не возникнут взаимоблокировки и гонки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...