如何在服务器端处理Fire and Forget Job?

问题描述 投票:0回答:1

我不确定我是否正确理解 Hangifre。

所以我有我的客户端,它正在将其发送到服务器:

var testModel = new CreateModel();
testModel.App = "example.com/";
testModel.Name = "testname.zip";

var jobId = BackgroundJob.Enqueue(() => JsonConvert.SerializeObject(testModel));

所以这工作正常,作业已创建,并与数据库中的 Json testModel 参数一起。

现在我需要在服务器端对 testModel 做一些事情。服务器运行正常,但是我怎样才能实现它,我得到这份工作并在服务器上用它做一些事情?数据库说任务

Succeeded
,但是我无法在服务器端获取它。我需要处理 Hangfire 服务器上的数据。

我在hangifre文档中找不到它。

hangfire
1个回答
0
投票
Hangfire 中的后台作业就像 Azure Functions (

https://azure.microsoft.com/en-us/products/functions) 或 Amazon Lambda (https://aws.amazon.com/lambda/) -您排队的“事物”需要是一些独立的任务。将其视为在未来某个任意时间执行的方法。 所以你可能想要类似的东西

public class DownloadFileJob { public async Task ExecuteAsync(string url, string fileName, PerformContext context, CancellationToken token) { // do whatever you're trying to do with the URL and file name } }

你会像这样将其排入队列(你的问题中不需要该模型):
var jobId = BackgroundJob.Enqueue<DownloadFileJob>(m => m.ExecuteAsync(url, fileName, null, CancellationToken.None);

作业在排队时被序列化,然后在 Hangfire 处理作业时反序列化为
DownloadFileJob
对象,在这种情况下,将使用提供的参数在该对象方法上执行

ExecuteAsync()

	

© www.soinside.com 2019 - 2024. All rights reserved.