开发者社区 > 云原生 > Serverless > 正文

s local invoke --function-name run_workflow -e '{"

s local invoke --function-name run_workflow -e '{"job_type":"run_workflow", "job_data":{"job_id": 2043}}' --invocation-type async 异步调用是这个参数是怎么用的, sync和async参数没有感受到区别

提问25.png

展开
收起
函数计算小白 2023-08-02 17:48:19 64 0
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    async参数指定 invoking 一个函数时使用的模式是同步还是异步。

    当指定为--invocation-type sync时(或不指定),表示同步调用。这时函数计算服务会等待函数执行完成后再返回结果。

    当指定为--invocation-type async时,表示异步调用。函数计算服务会立即返回一个 Task ID,然后在后台执行函数。调用方可以通过 Task ID 获取函数执行结果。

    具体区别如下:

    同步调用:

    json
    Copy
    $ local invoke --function-name run_workflow -e '{"job_type":"run_workflow", "job_data":{"job_id": 2043}}'

    会等待函数执行完成后返回结果

    {
    "body": "Function executed successfully!",
    "statusCode": 200
    }
    异步调用:

    apache
    Copy
    $ local invoke --function-name run_workflow -e '{"job_type":"run_workflow", "job_data":{"job_id": 2043}}' --invocation-type async

    立即返回一个 Task ID

    {"taskId":"83b7fb3b-8843-4afd-8c9a-30e0c8a42dba"}

    然后通过 Task ID 获取结果

    $ local get-task-result --task-id 83b7fb3b-8843-4afd-8c9a-30e0c8a42dba
    {
    "body": "Function executed successfully!",
    "statusCode": 200
    }
    之所以你没有感受到区别,可能是函数执行时间很短,返回结果也很快。

    对于执行时间比较长的函数,异步调用可以让调用方先返回,不用等待函数执行完成。

    我建议你尝试编写一个执行时间稍长(数秒或数十秒)的函数,然后试试看同步和异步调用的区别。

    2023-08-02 20:12:57
    赞同 展开评论 打赏
问答地址:

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载