在用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看起来非常臃肿,并且有很多像这样的重复调用。
非常感谢任何帮助或建议。
答案 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还没有这些功能。