我正在使用带有RIA服务的Silverlight,它本质上是异步的。然而,问题并不是针对这种技术选择的。
我想为一个Web服务包装一个异步调用,并提供我自己的简化和松散耦合的API(例如:DomainClient上的存储库)。
到目前为止,我的界面中有以下样式的异步方法:
public void DoAsyncWork(Action<AsyncWorkResult<someResultType>> callback);
我正在考虑添加以下重载:
public void DoAsyncWork(Action<someResultType> onSuccess,
Action<Exception> onException);
和
public void DoAsyncWork(Action<someResultType> onSuccess,
Action<Exception> onException,
Action finally);
onSuccess
操作仅在异步调用成功完成时执行,onException
执行,以防调用报告错误,finally
woul执行结束在任何一种情况下。
我的问题是,实施了第一种风格,即“一般风格”,最常用的(据我所知),我应该实施另外两种风格吗?他们是否值得开发和维护投资?
这个问题与设计方面有关,与任何要求无关。
提前致谢:)
答案 0 :(得分:0)
如果可能的话,我会说保留一个非常好的,一致的API。
最好模仿.NET中已存在的异步API,它允许您使用内置的异常处理语法:
public IAsyncResult BeginAsyncWork(AsyncCallback callback, object state);
public SomeResultType EndAsyncWork(IAsyncResult res);
使用方法如下:
BeginAsyncWork(res =>
{
// BeginAsyncWork calls this once it completes, even on error.
// res is IAsyncResult -- the same one BeginAsyncWork returns.
// res.AsyncState is whatever the users passed in the 'state' parameter.
try
{
// To get the result, and possibly an exception, EndAsyncWork is called.
SomeResultType r = EndAsyncWork(res);
}
catch(Exception ex)
{
// EndAsyncWork throws the exception.
}
finally
{
//
}
}, null);