1

MonoTouch C# で記述された iOS アプリのスプラッシュ スクリーンで、アプリを実行するために必要なすべてのデータが収集されるまで、いくつかの 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は非常に肥大化しているようで、このような繰り返しの呼び出しがたくさんあります.

ヘルプやアドバイスをいただければ幸いです。

4

1 に答える 1

2

TPL (Task Parallel Library) を見ると役立つと思います。これは、まさにあなたが話している種類の非同期処理に取り組んでいます。

Task を ContinueWith および WaitAll と共に使用すると、コード フローをクリーンアップする方法が見つかるはずです。

検索すると、これに関する何百もの開始リンクが見つかります。 Parallel-Library.htm


TPL の上に構築されており、近い将来、c# の新しい await/async 機能も使用できるようになりますが、これらは現在 MonoTouch では利用できません。

于 2013-02-11T10:59:55.850 に答える