Azure触发的Webjob-检测Webjob何时停止

Azure触发的Webjob-检测Webjob何时停止

问题描述:

我正在开发使用在webjob停止之前,我需要处置一些对象,但是我不知道如何触发"webjob停止".

Before the webjob stops, I need to dispose some objects but I don't know how to trigger the "webjob stop".

具有NoAutomaticTrigger函数,我知道我可以使用

Having a NoAutomaticTrigger function, I know that I can use the WebJobsShutdownWatcher class to handle when the webjob is stopping but with a triggered job I need some help...

我看了

I had a look at Extensible Triggers and Binders with Azure WebJobs SDK 1.1.0-alpha1.

创建一个自定义触发器(StopTrigger)是否是一个好主意,该触发器使用WebJobsShutdownWatcher类在webjob停止之前触发操作?

Is it a good idea to create a custom trigger (StopTrigger) that used the WebJobsShutdownWatcher class to fire action before the webjob stops ?

确定答案是在问题中:

是的,我可以使用

Yes I can use the WebJobsShutdownWatcher class because it has a Register function that is called when the cancellation token is canceled, in other words when the webjob is stopping.

static void Main()
{
    var cancellationToken = new WebJobsShutdownWatcher().Token;
    cancellationToken.Register(() =>
    {
        Console.Out.WriteLine("Do whatever you want before the webjob is stopped...");
    });

    var host = new JobHost();
    // The following code ensures that the WebJob will be running continuously
    host.RunAndBlock();
}

编辑(基于马修的评论):

EDIT (Based on Matthew comment):

如果使用触发函数,则可以在函数签名中添加CancellationToken参数.当主机自动关闭时,运行时将取消该令牌,从而使您的函数可以接收通知.

If you use Triggered functions, you can add a CancellationToken parameter to your function signatures. The runtime will cancel that token when the host is shutting down automatically, allowing your function to receive the notification.

public static void QueueFunction(
        [QueueTrigger("QueueName")] string message,
        TextWriter log,
        CancellationToken cancellationToken)
{
    ...
    if(cancellationToken.IsCancellationRequested) return;
    ...
}