1

我有以下 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 的用途是什么?

4

1 回答 1

0

CancellationToken 如何包含在实例化中

您可以使用WebJobsShutdownWatcher类,因为它有一个Register函数,当取消令牌被取消时调用,换句话说,当 web 作业停止时。

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

JobHostingConfiguration AddService 用于什么?

添加服务:通过调用 AddService<> 覆盖默认服务。要覆盖的常见服务是 ITypeLocator 和 IJobActivator。

这是一个自定义的IJobActivator允许您使用 DI,您可以参考它来支持实例方法。

于 2018-03-29T09:56:39.383 回答