6

我不是 C# 人,我更像是 Objective-C 人,但最近我看到了很多实现:

public void Method(Action<ReturnType> callback, params...)

代替:

public ReturnType Method(params...)

其中一个例子是 MVVM Light Framework,开发人员使用第一种方法实现数据服务合同(和实现),所以我的问题是:为什么会这样?只是喜欢的问题,或者是默认异步的第一种方法(给定函数指针)。如果这是真的,那是标准的回归死亡吗?我问是因为当我看到 API 时,我个人更喜欢第二种方法。

4

2 回答 2

10

与返回的 API 不同ReturnType,带有回调的版本可以立即返回,并在稍后执行回调。当要返回的值不能立即获得并且获得它需要相当长的延迟时,这可能很重要。例如,从 Web 服务请求数据的 API 可能需要相当长的时间。当结果数据不需要继续时,您可以发起调用,并提供异步回调。这样,调用者将能够立即继续,并在通知可用时处理通知。

考虑一个 API,它获取图像的 URL,并返回图像的内存表示。如果您的 API 是

Image GetImage(URL url)

并且您的用户需要提取十张图像,他们要么需要等待每个图像完成加载,然后再请求下一张,要么显式启动多个线程。

另一方面,如果您的 API 是

void Method(Action<Image> callback, URL url)

然后您的 API 的用户将同时启动所有十个请求,并在图像异步可用时显示它们。这种方法极大地简化了用户需要进行的线程编程。

于 2012-06-09T14:13:15.483 回答
3

第一种方法很可能是异步方法,该方法立即返回,一旦操作完成就调用回调。

第二种方法是在 C# 中为(同步)方法执行方法返回的标准方法。

当然,API 设计者可以自由地制作他们认为合适的任何签名。并且可能还有其他基础细节来证明回调样式的合理性。但是,根据经验,如果您看到回调样式,则希望该方法是异步的。

于 2012-06-09T14:13:43.173 回答