Согласно спецификации HTTP, нет никакого предела длине URL. Сохраните свои URL под 2 048 символами; это гарантирует работу URL во всех клиентах & конфигурации сервера. Кроме того, поисковые системы как URL, чтобы остаться приблизительно под 2 000 символов.
Хорошо, я провел небольшое тестирование и получил интересный результат.
Похоже, что это больше проблема перечислитель базовой коллекции, чем ключевое слово yield
. Перечислитель (на самом деле его метод MoveNext
) генерирует (если реализован правильно) исключение InvalidOperationException
, поскольку перечисление изменилось. Согласно документации MSDN для метода MoveNext это ожидаемое поведение.
Поскольку перечисление через коллекцию обычно не является поточно-ориентированным, возврат yield return
тоже не является.
Посмотрите этот пост о том, что происходит за кулисами с ключевым словом yield
:
За кулисами ключевого слова yield в C #
Короче говоря, компилятор берет ваше ключевое слово yield и генерирует целый класс в IL для поддержки функциональности. Вы можете проверить страницу после перехода и проверить сгенерированный код ... и этот код выглядит так, как будто он отслеживает идентификатор потока для обеспечения безопасности.
Что именно вы подразумеваете под потокобезопасностью?
Вы, конечно, не должны изменять словарь во время итерации по нему, будь то в том же потоке или нет.
Если словарь является при доступе в нескольких потоках, как правило, вызывающий вызывающий должен снять блокировку (ту же самую, которая охватывает все обращения), чтобы они могли блокироваться на время итерации по результату.
РЕДАКТИРОВАТЬ: Чтобы ответить к вашему редактированию, нет в никоим образом не соответствует коду блокировки. Блок итератора не снимает автоматическую блокировку - и откуда ему знать о syncRoot
?
Более того,
Я думаю, что да, но не могу найти ссылку, подтверждающую это. Каждый раз, когда какой-либо поток вызывает foreach на итераторе, должен создаваться новый локальный * экземпляр потока базового IEnumerator, поэтому не должно быть никакого «разделяемого» состояния памяти, из-за которого два потока могут конфликтовать ...