У меня есть класс, который предоставляет отменяемые события в соответствии с соглашением о вызове события до изменения состояния объекта и события после изменения состояния. Событие до изменения, выставляемое издателем (сервером), имеет форму StateChanging
и имеет в качестве аргумента CancelEventArgs
, а событие после изменения - в форме StateChanged
. Это предоставляет подписчику (клиенту) события возможность отменить операцию до ее начала.
Теперь я изменил одну из этих операций, сделав ее длительной операцией, и я хотел бы дать абоненту возможность отменить операцию также после ее начала (а также узнать о ходе операции). Я подумал о основанном на событиях асинхронном шаблоне .
Проблема заключается в том, что я хотел бы сохранить шаблон событий до и после изменения, поскольку именно издатель в какой-то момент требует операции, в то время как в асинхронном шаблоне мне кажется, что именно клиент попросить определенную операцию выполнить асинхронно. Другая возможность (но не кажется мне элегантной) может состоять в том, чтобы сервер выставлял событие (например, OperationRequired
), которое позволяет клиенту знать, что необходимо выполнить на стороне сервера, и соответственно вызывать метод RunOperationAsync()
, Пожалуйста, прокомментируйте и добавьте ваши предложения.