0

Как выполнить длительную работу и не дождаться результата с помощью ASP.NET MVC? Эта работа может отправлять миллионы электронных писем, отправлять push-уведомления или любые другие длительные работы/процессы, которые нам не нужны, когда это делается, нам просто нужно знать, что процесс запущен.Как выполнить длительную работу и не дождаться результата с помощью ASP.NET MVC?

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

Как вызвать метод в отдельном потоке из одного сеанса пользователя и убедиться, что он выполнен и продолжает работать, даже когда пользователь выходит из системы с сайта?

ответ

0

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

Это работа для службы Windows и ее отключение от приложения, создающего задания, использующие очередь (что-то вроде msmq, rabbitmq, aws sqs, azure queues). И если вы говорите, что хотите, чтобы их обрабатывали быстрее, добавьте больше потребителей в эти очереди, и если вы находитесь на aws или azure, то вы должны иметь возможность автоматически масштабировать на основе этих номеров очередей.

0

Вы будете искать здесь async.

Task.Run(() => SomeMethod(someVariable)); 

Здесь SomeMethod будет работать асинхронно.

0

Возможно, вы захотите изучить использование SignalR. Он был разработан командой ASP.NET, поэтому, скорее всего, был акклиматизирован для вашего существующего набора навыков. Если их можно использовать для создания таких вещей, как окна чата, игры с несколькими играми или в вашем случае, отслеживайте длительные процессы, происходящие на удаленном сервере (например, Azure).

http://signalr.net/

https://blog.safaribooksonline.com/2014/02/06/server-side-signalr/