行动<t>与标准回报</t>

时间:2012-06-09 14:07:28

标签: c# design-patterns asynchronous task-parallel-library

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

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

而不是:

public ReturnType Method(params...)

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

2 个答案:

答案 0 :(得分:10)

与返回ReturnType的API不同,具有回调的版本可以立即返回,并在稍后执行回调。当返回的值不能立即可用时,这可能很重要,并且获得它需要相当大的延迟。例如,从Web服务请求数据的API可能需要相当长的时间。如果不需要继续执行结果数据,则可以启动调用,并提供异步回调。通过这种方式,呼叫者可以立即继续,并在通知可用时处理。

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

Image GetImage(URL url)

并且您的用户需要提取十张图片,他们要么需要等待每张图片完成加载才能请求下一张图片,或者明确地启动多个线程。

另一方面,如果你的API是

void Method(Action<Image> callback, URL url)
然后,您的API用户将同时启动所有十个请求,并在异步可用时显示这些图像。这种方法大大简化了用户需要执行的线程编程。

答案 1 :(得分:3)

第一种方法可能是一种异步方法,该方法立即返回,并在操作完成后调用回调。

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

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