Я почти уверен, что то, что я закончил, близко к методу Джереми.
Я нашел этот сайт: http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx, который объясняет, как вызывать метод асинхронно. Подводя итог: если вы определите прокси-сервер и вызовете ProxyMethod.BeginInvoke (null, null), то метод будет запущен без обратного вызова, то есть сработает и забудется. Это было все, что я действительно хотел, так что это то, с чем я собираюсь. Я не знаю, было ли это необходимо, но я взял сам метод, переместил его из своего кода в бизнес-логику и сделал его статическим методом. Так по коду выглядит так:
private delegate void AsyncReportGen(ReportParameterObject rpo);
protected void GenerateReport()
{
//other code
AsyncReportGen reportGen = ReportGenClass.GenerateReportStaticMethod;
reportGen.BeginInvoke(rdo, null, null);
}
Метод GenerateReport вызывается событием нажатия кнопки. GenerateReportStaticMethod запускает электронное письмо с приложенным отчетом, когда он завершен. Метод, вызываемый BeginInvoke, запускается в своем собственном потоке, поэтому страница может завершить загрузку и показать пользователю сообщение о том, что он получит электронное письмо. Затем пользователь может продолжить использование сайта или закрыть свой браузер.