У меня есть функция async, которая будет работать и выполнять долгое время и интенсивную работу с ЦП. Поскольку это асинхронно, он не поддерживает пользовательский интерфейс.Один длительный процесс для каждого пользователя в приложении ASP.NET Core
В нормальных условиях у меня нет проблем с тем, как он работает. Процесс запускается нажатием кнопки, но это может быть вызвано вызовом API.
Я обнаружил, что если я нажимаю кнопку много раз подряд, весь сайт начинает реагировать медленно. Это злоупотребление, но тем не менее оно оказывает пагубное влияние на производительность.
Я хотел бы реализовать список в памяти вызовов функций пользователям, чтобы каждый пользователь мог иметь один экземпляр работающей функции, но он не принимал никаких дальнейших запросов от этого пользователя.
Кто знает какой-то умный способ реализации этого или сделал что-то подобное раньше. Я думаю о чем-то вроде потоковой коллекции, к которой вы можете добавить задачи, но если вы попытаетесь. Запустите задачу, которая уже запущена для определенного пользователя/Claimprincipal, тогда она не сможет ее добавить.
https://msdn.microsoft.com/en-us/magazine/dn802603.aspx Прочтите это, почему запуск ** CPU bound ** асинхронные задачи - это ужасная идея в ASP.NET (также применяется к ASP.NET ядро)! Используйте async только для действительно асинхронных операций, таких как соединения I/O (File, Network) или Database. Никогда для задач с привязкой к ЦП. Делая ресурсоемкие вещи в фоновом потоке или задачи полезно только для разработки пользовательского интерфейса (приложения WPF, Windows Phone и т.д.), где пользовательский интерфейс будет заблокирован, если вы запускаете ресурсоемкие вещи на UI теме – Tseng