我有一些Azure功能共享相同的代码。所以我创建了一个用于发布我的库的批处理文件。这是一个简单的bat文件。对于我的每个azure函数,它连接到主机并使用robocopy来同步文件夹。
但是,每次发布时,都会删除当前运行的函数。我想避免这种情况。有没有办法让运行函数自然地终止其工作?
我认为这是可能的,因为当我发布时,我不会重写正在运行的dll,而是复制<azure-function-url>/site/wwwroot
文件夹中的文件。
注意: 该函数调用async方法而不等待。源更改时,异步方法未完成工作。 (我不关注这个问题,感谢Matt的评论......打开我的眼睛)
答案 0 :(得分:2)
函数运行时旨在允许函数在主机重启时正常退出,请参阅here。
不等待你的异步调用是函数中的反模式,因为我们将无法跟踪你的函数执行。我们使用返回的Task
来确定您的函数何时完成。如果您没有返回Task
,我们假设您的函数在返回时已完成。
在您的情况下,这意味着当您的孤立异步调用正在运行时,我们将在重新启动时终止主机。如果您未能等待异步调用,我们也不保证成功:
执行:static async Task Run(...){ await asyncMethod(); }
不要:static void Run(...){ asyncMethod(); }