【发布时间】:2011-11-23 10:05:48
【问题描述】:
我正在设计一个执行长时间运行任务的类。我想出的第一个设计是:
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;
IMO 这些似乎使界面复杂化,除了成为其他 .Net 开发人员可识别的模式之外没有真正的优势。 APM 要求客户端代码始终调用 EndDoSomething(),即使在它们的 completedCallback 中也是如此,而 EAP 需要单独订阅已完成的事件。
使用我缺少的标准模式有哪些优势(如果有的话)?
【问题讨论】:
标签: c# design-patterns asynchronous