您好,我在 MVC 5 中使用 hangfire
创建了一个后台作业。我发送了后台作业已启动的通知,但我不知道如何在后台作业完成时发送通知因为我的 ActionResults 方法已经返回。
Controller
public ActionResult RunMedia(int ID)
{
BackgroundJob.Enqueue<CrawlerSearchRequestModel>(x => x.StoreMedia(ID,"NaturalPerson"));
obj
{
success: true
};
return JSON(obj, JsonRequestBehavior.AllowGet)
}
Ajax 调用和 Javascript 通知
$(document).ready(function () {
$(document).on("click", "#submitButton", function () {
debugger;
var userId = $(this).attr('userid')
$.ajax({
type: 'POST',
url: "../LemonCreditAuth/NaturalPerson/RunMedia",
data: {
ID: userId
},
success: function (data) {
swal("Adverse Media!", "Adverse Media has started. After a 20 seconds please check the media case for updates", "success");
},
error: function (data, error) {
swal("Adverse Media!", "Error ocurred while trying to run adverse media", "warning");
}
});
});
谢谢
最佳答案
正如其他人所说,您可以使用 signalR 或其他协议(protocol)。要实现此目的,请使用 IApplyStateFilter 过滤器并实现该接口(interface)的 OnStateApplied 方法。
public class YourAttribute : IApplyStateFilter{
public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
if (context.NewState.IsFinal && context.NewState.Name == "Succeeded")
//Send your message to client via signalR
}}
关于javascript - Hangfire 完成后如何发出通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857672/