Многопоточность в asp.net

Какие проблемы с многопоточностью нужно учитывать в asp.net?

Подробный блог по проблемам (хотя и устаревший) - это Phil Haacks haacked.com/archive/2011/10/16/…. Существует множество фреймворков для запуска фоновых процессов, таких как Quartz.NET и HangFire. Если вы можете жить с 90-секундным ограничением, вы даже можете использовать QueueBackgroundWorkItem. Если вы используете Azure, веб-работу или облачные сервисы.

RickAndMSFT 20.08.2014 04:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
1
3 658
6

Ответы 6

Программное кеширование - это одна из областей, которая сразу приходит мне в голову. Это отличная функция, которую нужно использовать осторожно. Поскольку он используется в разных запросах, вы должны заблокировать его перед обновлением.

Еще одно место, которое я хотел бы проверить, - это любой код, обращающийся к файловой системе, например, запись в файлы журнала. Если один запрос имеет блокировку чтения-записи для файла, другие параллельные запросы будут ошибаться, если не будут обработаны должным образом.

Одна вещь, на которую следует обратить внимание, когда истекает срок действия (я думаю, что httpContext делает), если вы используете его для операций, которые являются «выстрелил и забыл», помните, что внезапно, если код очистки asp.net выполняется до того, как ваша операция будет выполнена , вы не сможете получить доступ к определенной информации.

Если это для веб-службы, вам обязательно стоит подумать о пуле потоков. Слишком большое количество потоков приведет к остановке вашего приложения, потому что в конечном итоге они начнут конкурировать за процессорное время.

Это для файлового или сетевого ввода-вывода? Если это так, вам также следует рассмотреть возможность использования асинхронный ввод-вывод. Программировать это может быть немного сложнее, но вам не нужно беспокоиться о создании слишком большого количества потоков одновременно.

Создавать потоки из кода программной части страницы ASP.NET рискованно, потому что рабочий процесс будет время от времени перезапускаться, и ваш поток умрет.

Если вам нужно запустить длительные процессы в результате действий пользователя на веб-страницах, лучше всего оставить сообщение в MSMQ и создать отдельную фоновую службу, отслеживающую очередь. Службе может потребоваться столько времени, сколько она захочет выполнить задачу, и веб-страница завершит свою работу почти сразу. Вы можете сделать то же самое с помощью асинхронного вызова веб-метода, но не полагайтесь на получение ответа, когда веб-метод закончит работу. Из кода программной части все должно быть быстро и забыто.

Вы, кажется, отстаиваете эту технику в нескольких вопросах на StackOverflow, и я думаю, что это способ сделать длительный процесс, например, процесс выставления счетов. Есть ли какой-нибудь образец кода, которым вы можете поделиться? или ключевое слово для выпивки?

Salamander2007 29.07.2009 13:03

Существует множество фреймворков для запуска фоновых процессов, которые намного проще использовать, чем реализовать все это с помощью MSMQ. Например, • Quartz.NET и HangFire. Если вы можете жить с 90-секундным ограничением, вы даже можете использовать QueueBackgroundWorkItem. Если вы используете Azure, веб-работу или облачные сервисы.

RickAndMSFT 20.08.2014 03:53

Разве в конфигурации IIS нет ограничения в 25 общих потоков? По крайней мере, в IIS 6 я верю. Если вы превысите этот предел, могут произойти интересные вещи (читайте: длительное время отклика).

В зависимости от того, что вам нужно, что касается многопоточности, думали ли вы о создании запросов от клиента. Создавать запросы с помощью AJAX безопасно, а затем воздействовать на результаты в обратном вызове. Или используйте службу в качестве фонового механизма, который запускается каждые X минут и обрабатывается таким образом в фоновом режиме.

Другие вопросы по теме