【发布时间】:2018-09-17 22:43:14
【问题描述】:
今天,我有一个针对特定场景的特定问题。
场景:
- 我正在开发一个 Xamarin Forms 应用程序并且我正在使用 PRISM(显然也是 MVVM)。
- 我对请求 Web 服务有一些限制。之一 他们是:由于工作中的安全和政治原因,我必须使用公司(和内部)图书馆 .
-
这个企业库公开了请求网络的方法 使用回调的服务。其中一个看起来像这样:
public void Post(string requestUriString, string data, System.Action callbackSuccess, System.Action callbackError); 我的意思是,这个库不公开异步方法,如 HttpClient,用于 例子。取而代之的是,这个库使用回调方法。
企业库对 android 和 ios(每个平台一个库)。也正因为如此,我需要使用依赖注入来使用平台特定的代码
我的问题是
实现这个库的最佳方式是什么(谈论性能和最佳实践),为什么? 主要问题是要解释为什么一种解决方案可能比其他解决方案更好,并给出一个示例(代码)。
我正在考虑下面的示例,但我不知道哪一个可能更好,或者它们中的一个组合是否会更好,或者......它们都没有。
- 直接从 ViewModel 调用库并使用回调: Using callbacks example
- 使用 System.Threading.Tasks.Task.Run 作为 UI 线程的包装器(直接来自 ViewModel) Using Task.Run example
- 创建一个单独的类,该类仅包含 Web 服务请求,并将回调用作异步方法。 Separate business + callbacks example
【问题讨论】:
-
标准方法是使用
TaskCompletionSource。 -
感谢您的 cmets @JSteward。我在问题中给出的所有可能的解决方案实际上都有效。我主要关心的是为什么其中哪一个不是最佳解决方案或为什么是最佳解决方案。
标签: c# performance asynchronous xamarin.forms async-await