Связанные вопросы и ответы (я мог бы обновить этот вопрос, но тогда содержание будет совершенно другим)
Здесь в GetData and SetData
, это нерешительно:
Третий подход заключается в использовании двух методов в классе Thread: GetData и SetData.Они хранят данные в «слотах» для конкретных потоков.Thread.GetData читает из изолированного хранилища данных потока;Thread.SetData пишет в него.Оба метода требуют, чтобы объект LocalDataStoreSlot идентифицировал слот.Один и тот же слот можно использовать во всех потоках, и они все равно получат отдельные значения
и
В этом случае мы вызвали Thread.GetNamedDataSlot, который создает именованныйслот - это позволяет разделить этот слот между приложениями.
Вопрос 1 Пожалуйста, дайте мне понять, если он действителен: «Данные удерживаются слотом данных, удерживается для перекрестных потоковдля вызовов .net mvc web api. "
Согласно моему эксперименту в простом приложении web api:
public class ValuesController : ApiController
{
public IEnumerable<string> Get()
{
var res1 = System.Threading.Thread.GetData(System.Threading.Thread.GetNamedDataSlot("authHeader"));
if (res1 == null)
System.Threading.Thread.SetData(System.Threading.Thread.GetNamedDataSlot("authHeader"), new Random().var
res2 = Thread.GetData(System.Threading.Thread.GetNamedDataSlot("authHeader"));
return new string[] { "value1", "value2", res2?.ToString() };
}
}
1 - Если я установил точку останова
if (res1 == null)
для первого вызова он генерирует случайное число, а для последовательных вызовов res1 == null
всегда ложно, что означает, что res1
имеет значение, и генерируется только одно случайное число.
2 - Если я не установил точки останова
В режиме работы он дает случайным образом один из следующих выходов, который повторяется случайным образом, то есть 64853109 появляется более одного раза
<ArrayOfstring>
<string>value1</string>
<string>value2</string>
<string>64853109</string>
</ArrayOfstring>
<ArrayOfstring>
<string>value1</string>
<string>value2</string>
<string>1174687568</string>
</ArrayOfstring>
<ArrayOfstring>
<string>value1</string>
<string>value2</string>
<string>1367595402</string>
</ArrayOfstring>
<ArrayOfstring>
<string>value1</string>
<string>value2</string>
<string>1303501153</string>
</ArrayOfstring>
Вопрос 2 Я могу предположить, что когдаЯ установил точку останова, он использует alwAys ту же ветку, хотя я пытаюсь из другого браузера.Но не могли бы вы помочь мне диагностировать проблемы
Примечание. Слот Set and Get является источником ошибки текущего кода, я пытаюсь определить точную проблему.Мое намерение не использовать слоты потоков для будущего