Я разрабатываю класс, который выполняет долгосрочные задачи. Первый дизайн, который я придумал, был:
public TaskHandle DoSomethingAsync(DoSomethingCompleteCallback completedCallback);
public void CancelDoSomething(TaskHandle handle);
Это просто и кратко. Однако мне интересно, должен ли я реализовать его как один из стандартных асинхронных шаблонов .Net, о которых я читал?
APM:
public IAsyncResult BeginDoSomething(AsyncCallback completedCallback, Object stateObject);
public void EndDoSomething(IAsyncResult asyncResult);
EAP:
public void DoSomethingAsync(string param, object userState);
public event DoSomethingCompletedEventHandler DoSomethingCompleted;
Похоже, что они усложняют интерфейс, не принося никаких реальных преимуществ, кроме того, что шаблоны распознаются другими разработчиками .Net. APM требует, чтобы клиентский код всегда вызывал EndDoSomething () даже в их завершенном вызове, а EAP требуется отдельная подписка на завершенное событие.
Каковы преимущества, если таковые имеются, использования стандартных шаблонов, которые мне не хватает?