Using a custom delegate and calling its BeginInvoke method offer a quick way to fire off worker threads for your application. But unfortunately, they hurt the overall performance of your application since they consume threads from the same pool used by ASP.NET to handle HTTP requests.
Just remember too, if the callback from the Asynchronous method is important then, you need to block the main thread from returning to the client until the asynchronous process has completed. If the logging and analytics is a 'fire-and-forget' method call, then things are easier and you can just fire off the method and allow the server to respond to the client. However, if the callback is important and the server has completed processing, nothing is happening on the server to handle the callback once completed; this is where asynchronous processing on the server for ASP.NET applications differs from say a WinForms application.