在ASP.NET中创建大量的Thread

时间:2014-11-10 20:12:05

标签: c# asp.net multithreading

我在单独的Web应用程序上将“日志服务”作为Web服务。对于记录用户页面访问,我创建新的线程并在其中调用Web服务。通过这种方式,最终用户不会等待调用“日志服务”并立即得到响应。

可能会发生什么麻烦? 如果有人长时间按“F5”怎么办? 如果我使用线程池会发生什么?

你有更好的主意吗?

2 个答案:

答案 0 :(得分:1)

为每个Web服务调用创建一个新线程不是一个好习惯,因为创建一个新线程是一项昂贵的操作。

使用ThreadPool更好,因为它将重用现有的线程。您可以使用ThreadPool.QueueUserWorkItem方法。

我认为对Web服务进行异步调用是最好的选择。这取决于您呼叫的Web服务的类型。当Web服务是SOAP服务时,您可以在生成的服务引用上使用异步方法。否则,您可以使用WebClient类上的一个异步方法,如WebClient.UploadStringAsync

答案 1 :(得分:1)

可能发生的事情是您崩溃,部署或重启,所有未完成的工作都将丢失。

此外,您可以消耗无限量的资源。线程很昂贵(1MB内存)。使用线程池,或使用异步IO或批量调用外部服务。

此外,后台线程中未处理的异常会导致进程被杀死,恕不另行通知。您将不会收到有关该错误以及未完成/正在运行的工作丢失的通知。