Идея общего пользовательского сеанса на стороне сервера и архитектура в стиле микросервисов плохо сочетаются. Причина в том, что вы, скорее всего, нарушите разделение опасений, связанных с использованием отдельных границ домена ваших служб.
Помните, что каждая служба должна обслуживать определенную проблему домена автономно, включая все необходимые данные. Так, например, если есть что-то, что нужно запомнить для подключенных пользователями устройств, вы бы сделали это в одной службе, которая отвечает за эти подключения устройств, и больше нигде. Служба будет нести ответственность за обработку этого запроса и сохранение любого статуса, который требуется устройствам. Точно так же, когда есть что вспомнить об авторизации пользователей, вы делаете это в сервисе авторизации.
А что касается вопроса об использовании Redis или нет - В архитектуре микросервисов выбор системы хранения будет зависеть от сервисного архитектора. Может быть, одна служба хранит свои данные в реляционной базе данных, может, другая использует хранилище значений ключей, а другая может использовать систему очередей событий или базу данных временных рядов.
Итак, в итоге вы должны спросить себя, для чего на самом деле используется ваша сессия, и возложить на соответствующие службы ответственность за сохранение этой информации специфичным для домена способом. (Если вы дадите более подробную информацию в своем вопросе об этом, я могу высказать вам свое мнение).
То, что происходит с первым примером, - то, что значение гласного получено в локальное (к объему для цикла) переменная.
Где-пункт для запроса будет затем использовать ту полученную переменную. Операторы Where как это используют анонимный метод метода/лямбды, который может получить локальные переменные. Что происходит, затем то, что это получает текущее значение переменной.
Во втором классе, однако, это не получает текущее значение, только какая переменная использовать, и таким образом начиная с этой переменной изменения, каждый раз Вы выполняете цикл, Вы создаете новый оператор Where сверху последнего, но Вы отчасти изменяете все предыдущие также, так как Вы заменяете переменную.
Таким образом в первом примере, Вы получаете этот тип запроса:
IEnumerable<char> query2 = "Not what you might expect";
Char t1 = 'a'; query2 = query2.Where(c => c != t1);
Char t2 = 'e'; query2 = query2.Where(c => c != t2);
Char t3 = 'i'; query2 = query2.Where(c => c != t3);
Char t4 = 'o'; query2 = query2.Where(c => c != t4);
Char t5 = 'u'; query2 = query2.Where(c => c != t5);
Во втором примере Вы получаете это:
IEnumerable<char> query2 = "Not what you might expect";
Char vowel = 'a'; query2 = query2.Where(c => c != vowel);
vowel = 'e'; query2 = query2.Where(c => c != vowel);
vowel = 'i'; query2 = query2.Where(c => c != vowel);
vowel = 'o'; query2 = query2.Where(c => c != vowel);
vowel = 'u'; query2 = query2.Where(c => c != vowel);
К тому времени, когда Вы выполняете этот второй пример, значение vowel
будет 'u', поэтому только Вы будут разделены. У Вас есть, однако, 5 циклов по той же строке для разделения 'u', но только первый, конечно, сделает это.
Это получение переменных является одной из вещей, за которые все мы спотыкаемся при использовании анонимных методов/лямбд, и можно читать больше об этом здесь: C# Подробно: Красота Закрытий.
Если Вы просматриваете вниз что страница к тексту при Сравнении стратегий получения: сложность по сравнению с питанием, Вы найдете некоторые примеры этого поведения.
На самом деле, с перечитыванием его, он имеет смысл. Используя временные средства переменной, что сам временный файл получен в запросе... Мы оцениваем цикл пять раз, и поэтому существует пять инстанцированных временных ссылок на переменную для каждой версии запроса.
В случае без временной переменной существует только ссылка на переменную цикла.
Так пять ссылок по сравнению с одной ссылкой. Вот почему это приводит к результатам как показано.
В первом случае, после того как это оценило цикл полностью, запрос использовал эти пять ссылок на временные переменные, следовательно снимая a, e, я, o и u соответственно.
Во втором случае это делает то же самое... только все пять ссылок к той же переменной, которая очевидно только содержит одно значение.
Мораль истории: Думайте, что "ссылка" не "оценивает".
Так, это имеет смысл кому-либо еще теперь?