Xamarin Forms中的异步Web服务请求使用使用回调的公司库

问题描述 投票:0回答:1

今天,我针对特定情况提出了具体问题。

场景:

  • 我正在开发一个Xamarin Forms应用程序,我正在使用PRISM(显然也是MVVM)。
  • 我对请求Web服务有一些限制。其中之一是:由于工作中的安全和政治,我必须使用公司(和内部)图书馆。
  • 此公司库公开了使用回调请求Web服务的方法。其中一个看起来像这样: public void Post(string requestUriString, string data, System.Action callbackSuccess, System.Action callbackError);
  • 我的意思是,这个库不会像HttpClient那样暴露异步方法。而不是这个,这个库使用回调方法。
  • 公司库对android和ios有不同的实现(每个平台有一个库)。因此,我需要使用依赖注入来使用特定于平台的代码

我的问题是

哪个是实现此库的最佳方式(谈论性能和最佳实践)以及为什么?主要问题是要解释为什么一个解决方案可能比其他解决方案更好,并举一个例子(代码)。

我在下面的例子中思考,但我不知道哪一个可能更好,或者如果其中一个组合可能更好,或者......没有一个。

  1. 直接从ViewModel调用库并使用回调:Using callbacks example
  2. 使用System.Threading.Tasks.Task.Run作为UI线程的包装器(直接来自ViewModel)Using Task.Run example
  3. 创建一个仅包含Web服务请求的单独类,并将回调用作asynchronus方法。 Separate business + callbacks example
c# performance asynchronous xamarin.forms async-await
1个回答
0
投票

使用任务完成源。

public static class XXXExtensions
{
    public static Task PostAsync(this XXX self, string requestUriString, string data)
    {
        var tcs = new TaskCompletionSource<bool>();
        self.Post(
           requestUriString,
           data,
           () => tcs.TrySetResult(true)
           () => tcs.TrySetException(new Exception()));
        return tcs.Task;
    }
}

并像这样使用它:

await xxx.PostAsync(requestUriString, data);
© www.soinside.com 2019 - 2024. All rights reserved.