我正在编写一个ASP.NET 3.5网络应用程序,我希望“快速忘记”#34;来自Web的任务。
想法如下:
我的问题是,当我使用ThreadPool.QueueUserWorkItem()来触发进程时,我的Web界面永远不会收到AJAX答案。浏览器没有冻结,只是坐在那里等待。
代码:
AJAX电话
$("#btn-actualizar-instrumentos").click(function(e) {
e.preventDefault();
var contador = 0;
$.each(state, function(i, val) {
contador += val.length;
});
if (contador == 0) {
alert("No se han seleccionado instrumentos para actualizar.");
return;
}
else {
$("#btn-actualizar-instrumentos").button("option", "disabled", true)
$.blockUI({ message: "Enviando instrumentos seleccionados..." });
var textoFinal = JSON.stringify(state);
var idsFinal = JSON.stringify(ids);
$.ajax({
type: "POST",
url: 'SDI_obtenerarchivosbloomberg.aspx',
//data: textoFinal,
data: idsFinal,
success: function(response) {
$("#div-resultados").html(response.mensaje);
$("#div-resultados").dialog({
draggable: false
});
if (!response.oK) {
$("#btn-actualizar-instrumentos").button("option", "disabled", false);
}
},
error: function(xhr, msg, msg2) {
$("#div-resultados").html(xhr);
$("#btn-actualizar-instrumentos").button("option", "disabled", false);
},
complete: function(e) {
setTimeout(function() {
$.unblockUI();
}, 0);
}
});
}
});
ASP.NET代码:
public partial class PageClass1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var instrumentos = new List<decimal>();
// File generation and other tasks...
// Invocation of fire-and-forget task
var taskQueuing = ThreadPool.QueueUserWorkItem(c => DoWork(instrumentos));
// Building response
mensaje += "<p>\n";
if (taskQueuing)
{
mensaje += "Instrumentos procesados.<br />\n";
mensaje += "Se le notificará por correo electrónico cuando la operación de actualización esté completa.<br />\n";
mensaje += "Puede cerrar esta ventana ahora.<br />\n";
}
else
{
mensaje += "Error al enviar instrumentos:\n";
}
mensaje += "</p>\n";
// JSONing response
Response.StatusCode = 200;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/json";
Response.Write(textoRespuesta);
Response.Close();
}
private void DoWork(List<decimal> lista)
{
// Invoking SSIS package
}
}
我该如何解决这个问题?
提前致谢。