AsyncTask

AsyncTask顾名思义是异步任务,前一章提到的ServiceTask就是AsyncTask的派生类。

AsyncTask是使用多线程或者Unity的Coroutine实现的一个模拟C#的Task,可以方便的实现多个依赖任务的顺序执行。

启动一个AsyncTask需要调用Start方法;等待任务结束调用Continue方法。

  • 基本使用方法
// 创建一个Task,启动并等待任务完成
new AsyncTask().Start().Continue(task =>
{
    return null;
});
  • 连续执行多个依赖任务
// 开始第一个任务
new AsyncTask().Start().Continue(task =>
{
    return new AsyncTask();  // 开始第二个任务
}).Continue(task =>
{
    return new AsyncTask();  // 开始第三个任务
}).Continue(task =>
{
    return null;             // 结束
});

AsyncTask是异步任务的基类,本身构建了异步任务执行的流程,但你不会直接使用它,而是会经常用它的各种派生类。

ServiceTask

ServiceTask是获取GameBox提供的各种服务的异步Task,使用它可以确保Service初始化完成。

  • 获取单个服务
// 获取资产管理服务接口
new ServiceTask<IAssetManager>().Start().Continue(task =>
{
    var assetManager = task.Result as IAssetManager;

    return null;
});
  • 获取多个服务
new ServiceTask(new Type[]
{
    typeof(IAssetManager),
    typeof(INetworkManager),
}).Start().Continue(task =>
{
    var services = task.Result as IService[];
    var assetManager = services[0] as IAssetManager;
    var networkManager = services[1] as INetworkManager;

    return null;
});

本地文件读写Task

GameBox提供了FileReadTask和FileWriteTask,方便实现异步读写文件操作。

// 读文件
new FileReadTask(Path.Combine(Application.dataPath, "GameBox/configure.json")).Start().Continue(task =>
{
    return null;
});

// 写文件
byte[] bytes = <文件内容>;
new FileWriteTask(Path.Combine(Application.dataPath, "GameBox/configure.json"), bytes).Start().Continue(task =>
{
    return null;
});

results matching ""

    No results matching ""