我试图在 azure 工作人员角色上使用 HostingEnviornment.QueueBackgroundWorkItem 来在后台执行某些任务,但是我在代码中遇到异常“由于对象的当前状态,该操作无效。” 。
我们可以在 azure 的工作人员角色上使用 HostingEnviornment.QueueBackgroundWorkItem 吗?如果不能,请帮助我在工作人员角色的后台如何处理流程任务。
最佳答案
根据System.Web.Hosting.HostingEnvironment和QueueBackgroundWorkItem:
根据我的理解,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中执行后台处理。这里有一些引用,您可以引用它们(tutorial和tutorial)。