9

在 asp.net 中需要注意哪些类型的多线程问题?

4

6 回答 6

9

从 ASP.NET 页面的代码隐藏中生成线程是有风险的,因为工作进程偶尔会被回收并且您的线程会死掉。

如果由于用户在网页上的操作而需要启动长时间运行的进程,最好的办法是在 MSMQ 中删除一条消息,并让一个单独的后台服务监控队列。该服务可能需要尽可能长的时间来完成任务,并且网页几乎会立即完成其工作。您可以通过对 web 方法的异步调用来完成同样的事情,但不要依赖于在 web 方法完成工作时获得响应。从代码隐藏,它需要是一个快速的即发即弃。

于 2008-09-08T18:34:44.480 回答
6

在过期的事情上要注意的一件事(我认为 httpContext 确实如此),如果您将它用于“即发即忘”的操作,请记住,如果 asp.net 清理代码在您的操作完成之前运行,那么突然间,您将无法访问某些信息。

于 2008-09-08T17:30:45.227 回答
2

如果这是针对 Web 服务的,那么您绝对应该考虑使用线程池。过多的线程会使您的应用程序陷入停顿,因为它们最终会开始争夺 CPU 时间。

这是用于文件还是网络 IO?如果是这样,您还应该考虑使用异步 IO。编程可能有点痛苦,但您不必担心一次产生太多线程。

于 2008-09-08T17:55:53.153 回答
0

程序化缓存是我立即想到的一个领域。这是一个很棒的功能,需要小心使用。由于它是跨请求共享的,因此您必须在更新它之前对其进行锁定。

我要检查的另一个地方是访问文件系统的任何代码,例如写入日志文件。如果一个请求对文件有读写锁,其他并发请求如果处理不当就会出错。

于 2008-09-08T17:28:17.167 回答
0

IIS 配置中不是有 25 个总线程的限制吗?我相信至少在 IIS 6 中。如果您超过该限制,可能会发生有趣的事情(阅读:loooooooong 响应时间)。

于 2008-09-08T18:37:43.647 回答
0

根据您的需要,就多线程而言,您是否考虑过从客户端生成请求。使用 AJAX 生成请求是安全的,然后在回调中对结果进行操作。或者使用服务作为后台机制,每 X 分钟运行一次,并以这种方式在后台处理。

于 2014-12-18T22:49:46.410 回答