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;
});