我一直在阅读ASP.NET 3.5的异步功能/网页(我们还没有使用v4),但我看到的那些都专注于执行后台任务,但仍然回来完成在任务完成后发送并发送响应。
我想要做的只是启动后台任务(在这种情况下是对Web服务的调用),然后立即向浏览器返回响应 - 即。 没有等待异步任务完成。我甚至不需要知道它是否成功。
最好的方法是什么?我似乎无法找到在ASP.NET中开始你可能称之为“孤儿”后台任务的例子。
我想通过我向用户显示的页面上的javascript Ajax调用来实现它,但是传递给Web服务的信息是敏感的,所以这是不可能的。但这种说明了我想要做的事情。
[ed]另一个想法:在响应发送到浏览器并且连接关闭之后,我可以使用的ASP.NET模型中是否有一个事件出现?即。那么在没有用户等待的情况下可以进行更多处理?
答案 0 :(得分:2)
您可以使用线程...如果您不关心响应,只需使用:
try
{
Thread t = new Thread(new ThreadStart(yourMethodName));
t.Start();
}
catch{}
答案 1 :(得分:1)
我已经对这个主题进行了相当多的探索,并且在ASP.Net中找不到真正异步的好答案或技巧。问题似乎是即使您使用下面列出的任何常用技术启动Async任务:
您仍然在创建一种情况,即您的网络应用程序可用的有限线程被阻止。 UI可能不会被阻止,但“ThreadPool”中的另一个线程肯定是。当每个线程需要快速提供请求时,这可能会导致应用程序在高流量期间窒息。
虽然这是额外的工作,但会有一系列维护问题。我建议将任何长时间运行的任务卸载到MSMQ队列,然后使用Windows服务处理队列上的任务。这将允许您的Web应用程序利用所有可用线程来提供请求,并且您卸载的任务将继续在后台处理。使用MSMQ的另一个好处是您可以将任务实际发送到完全不同的服务器。这有两个好处:
正如我所说,我知道这是一堆额外的工作,但如果你有一个高性能的网站,那么这将是一个更安全的赌注。目标是让Web服务器尽可能顺畅地运行,而不会因长时间运行的任务而陷入困境。