c# - Action<T> 与标准返回

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

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

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

代替:

public ReturnType Method(params...)

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

最佳答案

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

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

Image GetImage(URL url)

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

另一方面,如果您的 API 是

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

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

关于c# - Action<T> 与标准返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961663/

相关文章:

ios - 在 Swift 中从多个 ViewController 收集数据

java - CompletableFuture.allOf().orTimeout() 的意外行为

c# - .NET Lambda 传递方法参数

c# - foreach,性能方面。我们应该在循环之前或循环内部声明一次变量吗?

c# - DataGridView 使用对象列表过滤 BindingSource 作为 DataSource

java - 验证 Java 中装饰器模式的实现

c# - 从 int 获取单字节

design-patterns - 面向对象的设计评估

asynchronous - 没有调用 async { try...finally...} 的 finally 的可能原因是什么? Rx 涉及

c# - Xamarin Gcm 网络管理器等待 httpclient