Ответ от того, что вы сказали до сих пор, «возможно».
Обратите внимание, что вам даже не нужна эта ситуация в двух разных файлах ASPX, два запроса к одному и тому же ASPX-файлу будут иметь такую же проблему, поскольку каждый файл ASPX может обрабатывать несколько одновременных запросов.
Большой вопрос: как объект на сделке с его файлом. Если это используется в порядке повторного входа, тогда все в порядке. Это означает, что если в любой момент вы можете вызвать другой поток, вызывающий метод, и потому, что никакое состояние в объекте никогда не изменяется (изменяются только локальные переменные, нет экземпляра или статических членов), тогда вы в порядке.
Если нет, тогда вам нужно будет заблокировать методы, о которых идет речь. Однако блокировка вводит узкое место в потоке. Даже если никогда не будет тупика, запросы будут стоять в очереди на этом этапе, и если метод не сможет освободить блокировку быстрее, чем появятся новые запросы, задержка, вызванная этой очередью, станет больше и больше, пока она не станет серьезной проблемой.
Если «удерживает дескриптор файла», вы имеете в виду, что у него есть объект File
, и каждый раз, когда он используется, он вызывает File.OpenRead
, прежде чем удалять поток, возвращенный в тот же вызов, тогда это нормально. Если, однако, вы имеете в виду, что у вас есть поток, возвращаемый File.OpenRead
, а вы Seek
перед каждым чтением, то у вас есть проблема параллелизма.
В то время как для одного приложения с резьбой консоли может быть более эффективным, чтобы открыть поток с OpenRead
Seek
, а затем, если нужно посмотреть в начале файла снова с многопоточного приложения (и все ASP.NET является по своей сути многопоточность, даже если вы никогда явно не создаете поток), гораздо эффективнее звонить OpenRead
каждый раз, когда вам нужно.
Проблемы существуют только в том случае, если какой-либо из ваших процессов заблокировал файл для записи (или заблокировал его для чтения) – Aristos
@Aristos - Почему? Это потому, что ASP.NET ставит очереди в запросы и обрабатывает только по одному? – User09874845
ASP.NET может одновременно обслуживать несколько запросов. –