DEV Community

Ting
Ting

Posted on

Task vs Job vs Stream

在Swift Concurrency的异步编程中,我们逐渐发现,大体上有如下三种情形

  • Task: 一般情况下耗时较短的异步回调,例如一个查询请求
  • Job: 一般情况下耗时较长的异步回调,例如一个打包下载离线地图的任务
  • Stream: 没有确定结束时间的“状态流”,如地理围栏触发的状态更新的通知

在考虑异步API设计的过程中,需要分门别类将其归为这几种异步情形之一。有一些帮助我们分类的问题:

  • 这件任务在回调前,常见需要运行多少时间?(一百毫秒、一秒、一分钟)
  • 作为用户使用这个API时,是否会希望其附带一个“进度条”?
  • 回调时常见的数据量大小是多少?
  • 是否有办法暂停、继续该任务?
  • 任务开始后,是否只能取消或等待其完成?
  • 是否存在超时错误?

以及一些帮助我们联想的例子:

  • 文件上传、下载
  • 图像渲染、视频处理
  • 服务器数据库请求
  • 批量文件处理
  • 科学计算、模型训练
  • GPS位置更新、股票价格更新
  • 支付请求超时

Top comments (0)