C# 在ASP.NET中创建大量线程

C# 在ASP.NET中创建大量线程,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我有一个“日志服务”作为单独web应用程序上的web服务。为了记录用户页面访问,我创建了新的线程并在其中调用web服务。这样,最终用户就不会等待调用“日志服务”并立即得到响应 可能会发生什么麻烦? 如果有人长时间按“F5”怎么办? 如果我使用线程池会发生什么 您有更好的想法吗?为每个web服务调用创建一个新线程不是一个好的做法,因为创建一个新线程是一个昂贵的操作 使用线程池更好,因为它将重用现有线程。你可以使用这个方法 我认为异步调用web服务是最好的选择。这取决于您调用的web服务的类型。当w

我有一个“日志服务”作为单独web应用程序上的web服务。为了记录用户页面访问,我创建了新的线程并在其中调用web服务。这样,最终用户就不会等待调用“日志服务”并立即得到响应

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


您有更好的想法吗?

为每个web服务调用创建一个新线程不是一个好的做法,因为创建一个新线程是一个昂贵的操作

使用线程池更好,因为它将重用现有线程。你可以使用这个方法


我认为异步调用web服务是最好的选择。这取决于您调用的web服务的类型。当web服务是SOAP服务时,您可以在生成的服务引用上使用异步方法。否则,您可以在类上使用异步方法,如。

可能发生的情况是崩溃、部署或重新启动,所有未完成的工作都将丢失

此外,您可能会消耗无限量的资源。线程非常昂贵(1MB内存)。使用线程池,或者对外部服务使用异步IO或批处理调用


此外,后台线程中未经处理的异常会导致进程在不另行通知的情况下被终止。您将不会收到该错误的通知,并且未完成/正在运行的工作将丢失。

您可以异步调用您的web服务吗?如果可以使用异步操作生成客户机代码,则应该能够调用
service.AsyncLog(…)
而不是
service.Log(…)