コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】並列でタスクを管理する独自クラス

概要

var task = new MultiTask();

task.Add( onEnded =>
{
    Debug.Log( "1" );
    onEnded();
} );

task.Add( onEnded =>
{
    Debug.Log( "2" );
    onEnded();
} );

task.Add( onEnded =>
{
    Debug.Log( "3" );
    onEnded();
} );

task.Play( () =>
{
    Debug.Log( "completed" );
} );
1
2
3
completed

以前関わっていたUnityプロジェクトで
先輩が作成してくださったタスク管理クラスです
このクラスを使用するとコールバック地獄から解放されます

前回紹介したSingleTaskとの違いに関してですが
MultiTaskはAdd関数で追加されたタスクが同時に実行されます

そのため、下記のように非同期で複数のリソースの読み込みを開始して
すべての読み込みが完了したら次の処理に進むといったことが実現できます

var task = new MultiTask();
task.Add( onEnded => ResourceManager.Load( "1.txt", onEnded ) );
task.Add( onEnded => ResourceManager.Load( "2.txt", onEnded ) );
task.Add( onEnded => ResourceManager.Load( "3.txt", onEnded ) );
task.Add( onEnded => ResourceManager.Load( "4.txt", onEnded ) );
task.Add( onEnded => ResourceManager.Load( "5.txt", onEnded ) );
task.Play( () => Debug.Log( "完了" ) ); 

関連記事