Передайте экземпляр ParallelOptions
с ParallelOptions.MaxDegreeOfParallelism
, установленным от 4 до Parallel.ForEach
.
Тем не менее, это может не иметь смысла на других машинах, которые могут иметь больше или меньше ядер, чем вы. В общем, вы должны позволить структуре определять степень параллелизма.
Часто люди упускают из виду самый обычный способ справиться с этим, который заключается в использовании одноразовых ключей .
Вы можете использовать PRG , как упоминали другие но недостатком PRG является то, что он не решает проблему двойного щелчка, он требует дополнительной поездки на сервер для перенаправления, а поскольку последний шаг - это запрос GET, у вас нет прямого доступа к данным, которые был только что опубликован (хотя его можно было передать как параметр запроса или поддержать на стороне сервера).
Мне нравится решение Javascript, потому что оно работает в большинстве случаев.
Одноразовые ключи ] однако работать все время. Ключ nonce - это случайный уникальный идентификатор GUID, сгенерированный сервером (также сохраненный в базе данных) и встроенный в форму. Когда пользователь отправляет форму POST, также отправляется одноразовый ключ. Как только на сервер поступает запрос POST, сервер проверяет, существует ли ключ nonce в его базе данных. Если это так, сервер удаляет ключ из базы данных и обрабатывает форму. Следовательно, если пользователь выполняет POST дважды, второй POST не будет обработан, потому что одноразовый ключ был удален после обработки первого POST.
Одноразовый ключ имеет дополнительное преимущество в том, что он обеспечивает дополнительную безопасность, предотвращая атак повторного воспроизведения. (человек посередине обнюхивает ваш HTTP-запрос и затем воспроизводит его на сервере, который рассматривает его как законный).
Возможно, вам стоит взглянуть на шаблон Post-Redirect-Get (PRG):
Вы всегда должны возвращать перенаправление в качестве ответа HTTP на POST. Это предотвратит повторное выполнение POST, когда пользователь перемещается вперед и назад с помощью кнопок Вперед / Назад в браузере.
Если вы беспокоитесь о том, что пользователи дважды щелкают ваши кнопки отправки, просто попросите небольшой скрипт отключить их немедленно отправить.
На самом деле это не относится к MVC, но на наших веб-страницах мы следуем схеме, согласно которой действия выполняются с помощью вызовов AJAX, а не полностраничных POST. Таким образом, переход по URL-адресу никогда не выполняет никаких действий, а просто отображает форму. Вызов AJAX не будет в истории
Наряду с отключением кнопок, вы можете добавить прозрачный div по всей веб-странице, чтобы при нажатии ничего не происходило. Мы делаем это на моей работе и добавляем небольшой дружелюбный ярлык с надписью «Запрос на обработку».