Azure-Function部署会终止我的运行过程。我可以避免吗?

时间:2017-03-28 13:40:12

标签: azure deployment azure-functions

我有一些Azure功能共享相同的代码。所以我创建了一个用于发布我的库的批处理文件。这是一个简单的bat文件。对于我的每个azure函数,它连接到主机并使用robocopy来同步文件夹。

但是,每次发布时,都会删除当前运行的函数。我想避免这种情况。有没有办法让运行函数自然地终止其工作?

我认为这是可能的,因为当我发布时,我不会重写正在运行的dll,而是复制<azure-function-url>/site/wwwroot文件夹中的文件。

注意: 该函数调用async方法而不等待。源更改时,异步方法未完成工作。 (我不关注这个问题,感谢Matt的评论......打开我的眼睛)

1 个答案:

答案 0 :(得分:2)

函数运行时旨在允许函数在主机重启时正常退出,请参阅here

不等待你的异步调用是函数中的反模式,因为我们将无法跟踪你的函数执行。我们使用返回的Task来确定您的函数何时完成。如果您没有返回Task,我们假设您的函数在返回时已完成。

在您的情况下,这意味着当您的孤立异步调用正在运行时,我们将在重新启动时终止主机。如果您未能等待异步调用,我们也不保证成功:

  • 登录
  • 输出绑定
  • 异常处理

执行:static async Task Run(...){ await asyncMethod(); }

不要:static void Run(...){ asyncMethod(); }