闽公网安备 35020302035485号
4. 客户端在查询到任务已经完成后,再向 Web API 发送获取结果的请求,从存储中读取结果并返回给客户端。
Hangfire.AspNetCore Hangfire.MemoryStorage AsyncFlowHangfire.AspNetCore 和 Hangfire.MemoryStorage 是用于配置 Hangfire 的包,这里我们使用内存作为存储。AsyncFlow 是用于生成异步轮询 Web API 的包。
// 堆代码 duidaima.com
// 配置 Hangfire
builder.Services.AddHangfire(config => config.UseMemoryStorage());
builder.Services.AddHangfireServer();
// 配置 AsyncFlow
builder.Services.AddAsyncFlow(options => options.UseMemoryCache());
// 注册业务逻辑类
services.AddTransient<DemoJob>();
...
// 创建异步轮询 Web API
app.MapFlow<DemoJob, DemoRequest, DemoResponse>("demo");
这里,我们使用了 MapFlow 扩展方法来创建异步轮询 Web API。它需要指定三个泛型参数:
public class DemoRequest
{
public string Name { get; set; }
}
public class DemoResponse
{
public string Message { get; set; }
}
public class DemoJob : IAsyncFlow<DemoRequest, DemoResponse>
{
public async Task<DemoResponse> ProcessAsync(DemoRequest request)
{
// 模拟耗时操作
await Task.Delay(20000);
return new DemoResponse{ Message = $"Hello {request.Name}" };
}
}
这里,我们只需要实现 ProcessAsync 方法,在这个方法中,我们可以执行任何业务逻辑,比如调用其他服务,执行数据库操作等。这里,我们只是简单地模拟了一个耗时 20 秒的操作,并返回结果。至此,我们就完成了异步轮询 Web API 的实现。下面,我们来测试一下效果。


