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;
    }
});

你认为这会有什么问题吗?这样做会有什么后果吗?

c#:设置HttpContext有问题吗?并行线程中的电流

对我来说似乎还可以。try…的用法最后一点也很好,因为线程可以被重用,并且您可以长时间保持上下文存活,从而避免垃圾收集。别以为还有别的办法可以解决这个问题。

但是要注意,你所调用的api不会在这个多线程环境中产生问题。并不是所有执行写操作或读操作的代码都是线程安全的,这些操作包括写/读一些缓存值。

还要注意,如果字段值不是易失性的,或者如果没有使用System.Threading.Interlocked,则字段值不能正确或及时地从一个线程传播到另一个线程!这可能会给您带来问题,特别是在发布版本中。

你可以使用Thread。MemoryBarrier或lock,在网上搜索这个恼人的(但不可避免的)问题