1

在用 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 看起来很臃肿,并且有很多这样的重复调用。

任何帮助或建议将不胜感激。

4

1 回答 1

2

我认为查看 TPL - Task Parallel Library 可能对您有用 - 这正好解决了您正在谈论的那种异步处理。

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

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


建立在 TPL 之上,在不久的将来,您还可以使用 c# 的新 await/async 功能 - 但这些现在不适用于 MonoTouch。

于 2013-02-11T10:59:55.850 回答