我正在设计一个执行长时间运行任务的类.我想出的第一个设计是:
public TaskHandle DoSomethingAsync(DoSomethingCompleteCallback completedCallback);
public void CancelDoSomething(TaskHandle handle);
Run Code Online (Sandbox Code Playgroud)
这简单而简洁.但是,我想知道我是否应该将其作为我一直在阅读的标准.Net异步模式之一来实现?
APM:
public IAsyncResult BeginDoSomething(AsyncCallback completedCallback, Object stateObject);
public void EndDoSomething(IAsyncResult asyncResult);
Run Code Online (Sandbox Code Playgroud)
EAP:
public void DoSomethingAsync(string param, object userState);
public event DoSomethingCompletedEventHandler DoSomethingCompleted;
Run Code Online (Sandbox Code Playgroud)
IMO这些似乎使界面变得复杂,除了作为其他.Net开发人员可识别的模式之外没有任何实际优势.APM要求客户端代码始终在其completedCallback中调用EndDoSomething(),并且EAP需要单独订阅已完成的事件.
如果有的话,使用我缺少的标准模式有什么好处?