有几种使用Play服务任务API创建自定义任务的方法。
首先,有Tasks.call(Callable)。传递给您的Callable计划立即在主线程上执行,并且您将获得一个Task,并带有Callable返回类型的通用参数。此任务使用该返回值成功解析,如果Callable抛出异常,则返回错误。
另一个方法是Tasks.call(Executor,Callable),与其他方法完全一样,不同之处在于,将给定的callable安排在给定的Executor管理的线程上立即执行。查找或创建适合您工作的执行器由您决定。
最后,还有TaskCompletionSource,它使您可以创建一个Task并根据与该Task没有直接关系的其他某些工作的结果手动将其解析为成功或失败。
有关更多详细信息,请查看我有关“任务”的博客系列。我将在第三部分和第四部分中介绍这些方法。
假设你有一个Document类,你可以这样做:
Tasks.<Document>forResult(document);
Run Code Online (Sandbox Code Playgroud)
Tasks.forException(new RuntimeException("Cool message"));
Run Code Online (Sandbox Code Playgroud)
interface CreateDocument extends Callable<Document> {
@Override
Document call();
}
Tasks.call(new CreateDocument());
Run Code Online (Sandbox Code Playgroud)
Task<Document> createDocument() {
TaskCompletionSource<Document> tcs = new TaskCompletionSource();
if (this.someThingGoesWrong()) {
tcs.setException(new RuntimeException("Cooler message"));
} else {
tcs.setResult(Document.factory());
}
tcs.getTask();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |