QueueBackgroundWorkItem

QueueBackgroundWorkItem

我试图在 azure 工作人员角色上使用 HostingEnviornment.QueueBackgroundWorkItem 来在后台执行某些任务,但是我在代码中遇到异常“由于对象的当前状态,该操作无效。”

我们可以在 azure 的工作人员角色上使用 HostingEnviornment.QueueBackgroundWorkItem 吗?如果不能,请帮助我在工作人员角色的后台如何处理流程任务。

最佳答案

根据System.Web.Hosting.HostingEnvironmentQueueBackgroundWorkItem:



根据我的理解,HostingEnvironment.QueueBackgroundWorkItem为您提供了从ASP.Net Web应用程序中排队后台任务的能力。 ASP.NET跟踪这些任务,并防止IIS在所有后台任务完成之前突然终止工作进程。

此外,我还尝试在我和Azure的辅助角色中调用HostingEnvironment.QueueBackgroundWorkItem,并尝试调用一个新的控制台应用程序。在ASP.NET Web应用程序中调用此方法时,它可以按预期工作。

我假设您可以按照以下方式利用Task-based Asynchronous Programming来运行后台作业:

var tokenSource = new CancellationTokenSource();
var cancellationToken = tokenSource.Token;

Task.Factory.StartNew((token) => {
    var ct = (CancellationToken)token;
    while (!ct.IsCancellationRequested)
    {
        //do your job
    }
}, cancellationToken, cancellationToken);

此外,您可以利用Hangfire在DotNet中执行后台处理。这里有一些引用,您可以引用它们(tutorialtutorial)。

10-04 16:19