首页 > 解决方案 > 在 asp.net 中对 HttpRequest.InputStream 的线程安全访问

问题描述

我开发了一个 .NET 库来帮助进行日志记录,并且可以在 ASP.NET 应用程序中使用。在我的代码中,我必须阅读和分析 Http 请求的正文。

目前我这样做:

        var stream = HttpContext.Request.InputStream;
        using (var reader = new StreamReader(
            stream,
            encoding: Encoding.UTF8,
            detectEncodingFromByteOrderMarks: true,
            bufferSize: 1024,
            leaveOpen: true))
        {
            Debug.WriteLine(reader.ReadToEnd());
        }

        // Another thread reads HttpContext.Request.InputStream here ...

        stream.Seek(0, System.IO.SeekOrigin.Begin);

我担心的是:

我更改了我的库之外的应用程序代码可以访问的流的位置。其他线程可以在我恢复之前访问流(寻找源)。

如果其他线程(例如由处理请求的代码创建的任务)同时读取相同的流怎么办?

使用我的库的应用程序会受到影响吗?

如果是 - 如何避免它?

标签: c#asp.net.netmultithreadingthread-safety

解决方案


推荐阅读