Здравствуйте, LF, Вы писали:
LF>Добрый день. LF>Класс предоставляет асинхронный интерфейс. LF>Вопрос состоит в том, что лучше использовать об уведомлении LF>окончания действия: LF>1) callback-функция в параметре метода LF>
Смотря кто потенциальный пользователь класса. В MS рекомендуют (или вернее рекомендовали) две модели — событийная модель begin/end модель
Если потенциальный пользователь — высокоуровневые абстракции, например уровень представления или низкоквалифицированные программисты, то удобнее событийная модель. Если требуется большая гибкость использования, то второй вариант.
Здравствуйте, LF, Вы писали:
LF>Класс предоставляет асинхронный интерфейс. LF>Вопрос состоит в том, что лучше использовать об уведомлении LF>окончания действия: LF>1) callback-функция в параметре метода
Добрый день.
Класс предоставляет асинхронный интерфейс.
Вопрос состоит в том, что лучше использовать об уведомлении
окончания действия:
1) callback-функция в параметре метода
public void DoSmth(Action<Result> OnDoSmth){ ... };
2) событие
public void DoSmth(){ ... };
public EventHandler<Result> DoSmthCompleted;
Здравствуйте, LF, Вы писали:
LF>Добрый день. LF>Класс предоставляет асинхронный интерфейс. LF>Вопрос состоит в том, что лучше использовать об уведомлении LF>окончания действия: LF>1) callback-функция в параметре метода LF>
C>а BeginXXX / EndXXX чем плохи?
Тут немного другой случай, методом EndXXX мы требуем результат
в некий момент времени, и не важно был ли он уже получен или нет.
В моем случае класс просто должен информировать когда результат будет готов.
C>если выбирать из предложенных,я за п.1.
Тоже больше нравиться п1, но достаточно редко его встречаю.
Здравствуйте, LF, Вы писали:
C>>а BeginXXX / EndXXX чем плохи? LF>Тут немного другой случай, методом EndXXX мы требуем результат LF>в некий момент времени, и не важно был ли он уже получен или нет. LF>В моем случае класс просто должен информировать когда результат будет готов.
C>>если выбирать из предложенных,я за п.1. LF>Тоже больше нравиться п1, но достаточно редко его встречаю.
Вызывая EndXXX мы ожидаем завершения операции если она ещё не законченна. Возвращает она результат или нет не имеет значения. В модели Begin/End также предусмотрен механизм обратного вызова. Если вы уверены, что вам никогда не потребуется ожидать завершения, получать нотификации о ходе процесса, отменять операцию, то можно действительно передать в параметры функции колбэк, который будет вызван по завершению операции или реализовать событийную модель с одним событием XXXCompleted.