taskpipeline 0.0.3

  • Readme
  • Changelog
  • Example
  • Installing
  • 75

什么是 Task Pipeline ? #

在这里,每一个可拆分的执行块都可以看做是 Task. 将很多个 Task 集中统一执行的过程抽象为管线,命名为 TaskPipeline.

使用 TaskPipeline,你可以很简单地写出高复杂度的任务流程,大大增加程序的可读性.

开始使用 #

当前最新版本为: 0.0.3

在 "pubspec.yaml" 文件中加入

dependencies:
  taskpipeline: ^0.0.3

github

https://github.com/CimZzz/taskpipeline

首先,我们需要创建一个名为 TaskPipeline 对象:

/// 本库中核心类,所有的用例都是围绕其展开的
TaskPipeline pipeline = TaskPipeline();

然后通过 pipeline 对象,我们可以执行一个 Task:

/// 很简单的一个 Task
/// 其作用是返回了一个整数 10
pipeline.execInnerTask(leafExec: () async {
  return 10;
})

这样,我们就完成了一次简单的 Task 任务.

另外,我们可以给想要执行的 Task 提供一个 key,这样我们就可以通过 key 来主动将其终结(终结过程是瞬间同步的)

/// 还是之前的任务,只是添加了 2 秒延时
pipeline.execInnerTask(key: "task", leafExec: () async {
  await Future.delayed(const Duration(seconds: 2));
  return 10;
})

pipeline.finishTask("task");

是的,只需要调用 finishTask + Task 的 key,就能直接将其终结,就是那么简单.

更多示例可以参考:

代码示例

0.0.1 #

  • 通过 TaskPipeline,控制全部 Task 的执行与结束.
  • TaskPipeline 可以执行内部 Task,并提供 4 种执行回调方法:
/// 内部 Task 回调,需要消息数据
typedef MessageTaskExecutor<T, Q> = Future<Q> Function(T data, TaskPipeline childPipeline);

/// 内部 Task 回调,需要消息数据,但是不需要子 Pipeline
typedef LeafMessageTaskExecutor<T, Q> = Future<Q> Function(T data);

/// 内部 Task 回调,不需要消息数据
typedef TaskExecutor<Q> = Future<Q> Function(TaskPipeline childPipeline);

/// 内部 Task 回调,不需要消息数据,也不需要子 Pipeline
typedef LeafTaskExecutor<Q> = Future<Q> Function();

MessageTaskExecutor<T, Q> msgExec;
LeafMessageTaskExecutor<T, Q> leafMsgExec;
TaskExecutor<Q> exec;
LeafTaskExecutor<Q> leafExec;

以上四种执行回调同一时间只有一种可以生效.

  • TaskPipeline 可以执行共享 Task
  • TaskPipeline 可以终结 Task

0.0.2 #

  • 执行内部 Task 时可以执行同步方法

0.0.3 #

  • 调整代码风格
  • _TaskCompleter 改造成 ProxyCompleter,可以单独作为一个工具来使用

example/README.md

示例链接 #

示例 1: 执行一个简单的内部 Task #

示例链接

示例 2: 执行方式 execrun 的区别

示例链接

示例 3: 将方法作为 Task 的执行回调 #

示例链接

示例 4: 主动终结 Task #

示例链接

示例 5: 使用子 TaskPipeline 执行 Task

示例链接

示例 6: 执行一个共享 Task #

示例链接

示例 7: 终结共享 Task #

示例链接

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  taskpipeline: ^0.0.3

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:taskpipeline/taskpipeline.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
53
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
90
Overall:
Weighted score of the above. [more]
75
Learn more about scoring.

We analyzed this package on Jan 16, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.7.0
  • pana: 0.13.4

Health suggestions

Format lib/src/proxy_completer.dart.

Run dartfmt to format lib/src/proxy_completer.dart.

Format lib/src/share_task.dart.

Run dartfmt to format lib/src/share_task.dart.

Format lib/src/task_exceptions.dart.

Run dartfmt to format lib/src/task_exceptions.dart.

Format lib/src/task_pipeline.dart.

Run dartfmt to format lib/src/task_pipeline.dart.

Maintenance suggestions

Package is pre-v0.1 release. (-10 points)

While nothing is inherently wrong with versions of 0.0.*, it might mean that the author is still experimenting with the general direction of the API.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.2.0 <3.0.0
Dev dependencies
pedantic ^1.0.0
test ^1.0.0