2013-02-11 63 views
1

在用MonoTouch編寫的iOS應用程序的啓動畫面C#我打電話給一些Web服務,然後調用另一個Web服務,直到我需要的所有數據都被收集起來運行。我這樣做是異步的,這樣我就可以向用戶顯示一個活動指示器。Web服務控制器設計

但是我覺得代碼非常混亂,所有這些調用和回調都在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看起來很臃腫,並且有很多像這樣的重複調用。

任何幫助或建議將是非常讚賞。

回答

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的頂部,在不久的將來,你也將能夠使用新的await/c#的異步功能 - 但是目前MonoTouch無法使用這些功能。

+0

這看起來很有趣,最有可能就是我要找的。我也看看,看看等待/異步是可供MonoTouch的,但我認爲這是即將推出。 – Serberuss 2013-02-11 11:10:25