Для чего используется AddService JobHostingConfiguration с веб-заданиями Azure

У меня есть следующая функция WebJob...

public class Functions
{
    [NoAutomaticTrigger]
    public static void Emailer(IAppSettings appSettings, TextWriter log, CancellationToken cancellationToken)
    {
        // Start the emailer, it will stop on dispose
        using (IEmailerEndpoint emailService = new EmailerEndpoint(appSettings))
        {
            // Check for a cancellation request every 3 seconds
            while (!cancellationToken.IsCancellationRequested)
            {
                Thread.Sleep(3000);
            }

            log.WriteLine("Emailer: Canceled at " + DateTime.UtcNow);
        }
    }
}

Я смотрел на то, как это создается, что я могу сделать с помощью простого вызова...

host.Call(typeof(Functions).GetMethod("MyMethod"), new { appSettings = settings })

Однако меня удивляет, как TextWriter и CancellationToken включены в реализацию. Я заметил, что JobHostingConfiguration имеет методы для AddService, и я попытался внедрить мои appSettings, используя это, но это не удалось с ошибкой "Параметр привязки исключения".

Итак, как CancellationToken включается в создание экземпляра и для чего используется JobHostingConfiguration AddService?

1 ответ

Каким образом CancellationToken включается в реализацию

Вы можете использовать класс WebJobsShutdownWatcher, потому что он имеет функцию Register, которая вызывается при отмене токена отмены, другими словами, когда останавливается веб-работа.

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();
}

для чего используется AddHervice JobHostingConfiguration?

Добавить службы: переопределить службы по умолчанию через вызовы AddService<>. Распространенными службами для переопределения являются ITypeLocator и IJobActivator.

Вот пользовательский IJobActivator позволяет использовать DI, вы можете обратиться к нему для поддержки методов экземпляра.