asp.net中的多线程技术

asp.net中的多线程技术,asp.net,multithreading,Asp.net,Multithreading,在asp.net中,您需要注意哪些类型的多线程问题 编程缓存是我马上想到的一个领域。这是一个很好的特性,需要小心使用。因为它是跨请求共享的,所以在更新它之前必须在它周围加锁 我要检查的另一个地方是任何访问文件系统的代码,比如写入日志文件。如果一个请求对一个文件具有读写锁,那么如果处理不当,其他并发请求将出错。如果您将其用于“触发并忘记”操作,则在过期的情况下(我认为httpContext会),需要注意一件事请记住,如果asp.net清理代码在您的操作完成之前突然运行,您将无法访问某些信息

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

编程缓存是我马上想到的一个领域。这是一个很好的特性,需要小心使用。因为它是跨请求共享的,所以在更新它之前必须在它周围加锁


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

如果您将其用于“触发并忘记”操作,则在过期的情况下(我认为httpContext会),需要注意一件事请记住,如果asp.net清理代码在您的操作完成之前突然运行,您将无法访问某些信息
这是文件IO还是网络IO?如果是这样,你也应该考虑使用。编程可能会有点麻烦,但您不必担心一次生成太多线程。

从ASP.NET页面的代码背后生成线程是有风险的,因为工作进程偶尔会被回收,您的线程也会死亡


如果由于用户在网页上的操作而需要启动长时间运行的进程,那么最好在MSMQ中删除一条消息,并使用单独的后台服务监控队列。这项服务可能需要多长时间才能完成任务,网页几乎可以立即完成工作。您可以通过对web方法的异步调用来完成同样的事情,但不要依赖于在web方法完成工作时获得响应。从代码隐藏的角度来看,它需要快速启动并忘记。

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

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

在StackOverflow的多个问题中,您似乎都在提倡这种技术,我认为这是长时间运行的流程(例如计费流程)的方法。是否有任何示例代码可以共享?或者是一个关键字?有很多用于运行后台进程的框架,它们比用MSMQ实现所有这些要容易得多。例如,•Quartz.NET和HangFire。如果您可以接受90秒的限制,那么您甚至可以使用QueueBackgroundWorkItem。如果你在Azure、Web作业或云服务上。关于问题的权威博客(尽管已经过时)是Phil Haacks。有许多用于运行后台进程的框架,如Quartz.NET和HangFire。如果您可以接受90秒的限制,那么您甚至可以使用QueueBackgroundWorkItem。如果您使用Azure、Web作业或云服务。