Thread.GetNamedDataSlot: конфликт между сеансами пользователя - PullRequest
0 голосов
/ 03 декабря 2018

Связанные вопросы и ответы (я мог бы обновить этот вопрос, но тогда содержание будет совершенно другим)

Здесь в 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 является источником ошибки текущего кода, я пытаюсь определить точную проблему.Мое намерение не использовать слоты потоков для будущего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...