# 用户取消订阅时,已经开始的任务该怎么办? | EasyNet Source: https://easynet.run/cases/problems/subscription-cancel-inflight-work [easynet.run · 全部问题场景](https://easynet.run/cases#problem-scenarios) # 用户取消订阅时,已经开始的任务该怎么办? 用户取消了订阅,昨晚提交的视频却还在生成。页面说订阅已取消,他以为处理也会停;作者担心交付后收不到费用。双方缺的是对正在进行的订单怎样处理的共同说明。 现有订阅平台可以管理续费和到期,业务系统管理已接受的订单。只提供偶尔按次处理的服务,也许根本不需要订阅。不要让一个取消按钮同时含糊地代表停续费、停新任务和停所有执行。 新请求进入时,由权益服务核验调用者的订阅状态,再决定是否通过 EasyNet 提交处理。订单一旦被接受,就保存当时的权益和处理状态,不能仅凭当前订阅页面反推它是否应该继续。 对在途任务,需要明确是完成交付、请求取消还是转人工协商。上游是否支持取消、取消后是否仍收费,要逐一核对;撤销后续调用权限不等于已经停止远端生成,更不等于退款完成。 订阅方负责到期时间,订单方负责交付,运行方反馈实际停止状态,支付方处理退款。用户应能看到哪些订单继续、哪些正在取消,以及什么时候再查;运行连接的有效期不能替代这套约定。 在到期时刻附近同时提交和取消一项测试任务,再让上游暂时无法查询。检查已接受订单没有凭空消失、新请求按规则拒绝、未知状态没有被写成已退款,账目最终也能与处理结果对上。 01 昨晚的视频订单 记录接单时的权益与费用约定 02 今天取消订阅 按生效时间检查新提交 03 逐单处理 继续交付或确认取消,不猜退款 解约改变新任务准入;已接视频有自己的交付状态。 把新任务和已接订单分开判断 这个例子选择“已接单继续交付”的业务规则。它不向上游发送取消,也不执行退款。实际规则应在购买前说明。 本地示例 · python ``` from datetime import datetime, timezone cutoff = datetime(2026, 9, 7, 12, tzinfo=timezone.utc) submitted = datetime(2026, 9, 7, 13, tzinfo=timezone.utc) accepted_order = {"id": "V-88", "state": "running"} print("reject_new" if submitted >= cutoff else "check_entitlement") print(accepted_order["id"], "finish_accepted_order") ``` 预期结果:输出 reject_new 和 V-88 finish_accepted_order。新任务被拒绝不会抹掉原订单。 接入时的检查项 生效后的新请求被执行前拒绝,旧任务仍按已公布规则处理。 收到取消请求但上游继续运行时,界面不会提前宣称全部停止。 退款或剩余权益与支付系统记录一致,订阅状态不覆盖未交付订单。 源码与接入资料 [函数接入指南](https://easynet.run/docs/connect/function) [不复制源码,也能复用业务逻辑](https://easynet.run/cases/function-reuse) [Stripe Connect 官方:平台收款与多方资金流](https://docs.stripe.com/connect)