c#:设置HttpContext有问题吗?并行线程中的电流
本文关键字:线程 并行 设置 HttpContext 有问题 | 更新日期: 2023-09-27 18:12:04
我使用的是一个依赖于HttpContext.Current的库。该库是Facebook c# SDK,但我的问题应该适用于其他场景。我想从一个并行线程内部使用这个库。然而,HttpContext。当前在并行线程中不可用,所以我正在考虑将其缓存到一个局部变量,然后在并行线程中设置它,如下所示:
var httpContext = HttpContext.Current;
Parallel.ForEach(items, item => {
try {
HttpContext.Current = httpContext;
// Call a method that relies on HttpContext.Current
} finally {
HttpContext.Current = null;
}
});
你认为这会有什么问题吗?这样做会有什么后果吗?
对我来说似乎还可以。try…的用法最后一点也很好,因为线程可以被重用,并且您可以长时间保持上下文存活,从而避免垃圾收集。别以为还有别的办法可以解决这个问题。
但是要注意,你所调用的api不会在这个多线程环境中产生问题。并不是所有执行写操作或读操作的代码都是线程安全的,这些操作包括写/读一些缓存值。还要注意,如果字段值不是易失性的,或者如果没有使用System.Threading.Interlocked,则字段值不能正确或及时地从一个线程传播到另一个线程!这可能会给您带来问题,特别是在发布版本中。
你可以使用Thread。MemoryBarrier或lock,在网上搜索这个恼人的(但不可避免的)问题