Web服务控制器设计

时间:2013-02-11 10:01:43

标签: c# service web xamarin.ios

在用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在幕后使用此代码检索事件args中的数据。在所有这些调用结束时,我将更改为新视图以显示填充此数据的主屏幕。然而,我的ViewController看起来非常臃肿,并且有很多像这样的重复调用。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:2)

我认为查看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#的新的await / async功能 - 但是现在MonoTouch还没有这些功能。