У меня есть веб-приложение ASP.NET, которое позволяет конечным пользователям загружать файлы.Когда файл находится на сервере, я создаю поток для его обработки.В поток передаются данные, касающиеся конкретной операции (UserId
, путь к файлу, различные параметры и т. Д.).Большая часть данных передается через объекты и параметры методов, но UserId
должна быть доступна более глобально, поэтому я поместил ее в локальное хранилище потоков.
Поток длинный, но он просто обрабатывает файл и прерывает работу.Безопасно ли мое использование названного слота данных в этих обстоятельствах? Если UserA загружает файл, тогда UserB загружает файл, пока первый файл еще обрабатывается, возможно ли, что поток для UserA также будет делегирован для обработки UserB, что приведет к конфликту для именованного слота?т.е. слот перезаписывается идентификатором UserB, а остальная часть файла UserA связана с неверным пользователем, UserB).
Public Class FileUploadProcess
Public UserId as String
Public Sub ExecuteAsync()
Dim t As New Thread(New ThreadStart(AddressOf ProcessFile))
t.Start()
End Sub
Protected Sub ProcessFile()
Dim slot As LocalDataStoreSlot = Thread.GetNamedDataSlot("UserId")
Thread.SetData(slot, UserId)
'lengthy operation to process file
Thread.FreeNamedDataSlot("UserId")
Thread.CurrentThread.Abort()
End Sub
End Class
Примечание , которое я не спрашиваюLocalNamedDataStore
слоты являются поточно-ориентированными.По определению я знаю, что они есть.