我正在设计一个执行长时间任务的类。我最初想到的设计是:
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 要求客户端代码在 completedCallback 中始终调用 EndDoSomething(),而 EAP 需要单独订阅 completed 事件。
那么,如果有的话,使用标准模式的优点是什么?我是否遗漏了什么重要的信息?