Web服务控制器设计

本文关键字:控制器 服务 Web | 更新日期: 2023-09-27 17:58:43

在一个用MonoTouch C#编写的iOS应用程序的启动屏幕中,我正在调用一些web服务,然后这些服务会调用另一个web服务,直到收集到运行该应用程序所需的所有数据。我异步执行此操作,以便可以向用户显示活动指示器。

然而,我觉得代码非常混乱,所有这些调用和回调都在ViewController中。我想要一种将其分离的方法,这样ViewController只关心返回的结果,但我需要一种方法让ViewController停止,直到调用完成。

目前,我的代码看起来有点像这样:

protected void FirstServiceCompleted(object sender, FirstServiceCompletedEventArgs e)
{
    // Do something
    _servicesHelper.GetSecondService(GetSecondServiceCompleted);
}
protected void SecondServiceCompleted(object sender, SeconServiceCompletedEventArgs e)
{
    // Do something else
    _servicesHelper.GetThirdService(GetThirdServiceCompleted);
}
... etc

如果在幕后使用此代码时,我的ViewController能够通过另一个对象从事件参数中检索数据,那就太好了。在所有这些调用结束时,我切换到一个新的视图,以显示填充了这些数据的主屏幕。然而,我的ViewController似乎非常臃肿,并且有很多类似的重复调用。

如有任何帮助或建议,我们将不胜感激。

Web服务控制器设计

我认为查看TPL-任务并行库可能会很有用,它正好解决了您所说的异步处理。

将Task与ContinueWith和WaitAll一起使用,我相信您会找到清理代码流的方法。

如果你搜索,你会发现数百个入门链接http://www.codeguru.com/columns/experts/article.php/c17197/Understanding-Tasks-in-NET-Framework-40-Task-Parallel-Library.htm


构建在TPL之上,在不久的将来,您还可以使用c#的新等待/异步功能,但这些功能目前还不能用于MonoTouch。