В вашем случае это звучит так, как будто решение, которое вы будете искать, является многогранным (а не простым и готовым проектом).
Поскольку вы сказали, что некоторые процессы могут длиться часами, это совершенно не то, чем владеет ASP.NET. Это должно быть запущено внутри службы Windows и управляться с собственными потоками Windows.
Вам нужно будет внедрить в вашу службу какой-либо тип рабочей очереди и способ связи с этой очередью. Одним из способов является предоставление службы WCF для всех действий, которыми будет управлять ваша служба. Другой способ - сделать так, чтобы сервис опрашивал таблицу базы данных и выбирал работу из таблицы.
Чтобы иметь возможность выражать состояние процесса, вам нужно, чтобы приложение ASP.NET могло иметь некоторую ссылку на processID, например, служба WCF возвращает идентификатор guid. Затем у вас есть метод, который, когда вы дадите ему идентификатор процесса, вернет статус процесса. Затем вы можете реализовать опрос этого сервисного вызова, используя AJAX, и отобразить любой тип модальности, какой пожелаете.
Еще одна вещь, которую нужно помнить, это то, что вам нужно спроектировать свои процессы так, чтобы они знали, где они находятся и где они будут, когда будут завершены, чтобы он мог отслеживать состояние, в котором он находится. Например, BatchJobA запущен и будет иметь 1000 записи для обработки. Служба должна знать, на какой записи она находится или каков текущий процент конкурентов, чтобы иметь возможность возвращать информацию в пользовательский интерфейс. Для SQL-запросов, выполнение которых занимает очень много времени, может быть очень проблематично точно определить, где он находится, если только вы не выполняете большую часть предварительной и последующей обработки временных таблиц, которые вы можете в середине ее прочитать для состояния временных таблиц, чтобы понять, где это.