I have implemented an http module which will be fired on application start of my ASP.NET application
using System.Web;
using System.Threading.Tasks;
using System;
using System.Net.Http;
namespace BL.HttpModules
{
    public class MyCustomAsyncModule : IHttpModule
    {
        #region Static Privates
        private static bool applicationStarted = false;
        private readonly static object applicationStartLock = new object();
        #endregion
        public void Dispose()
        {
        }
        /// <summary>
        /// Initializes the specified module.
        /// </summary>
        /// <param name="httpApplication">The application context that instantiated and will be running this module.</param>
        public void Init(HttpApplication httpApplication)
        {
            if (!applicationStarted)
            {
                lock (applicationStartLock)
                {
                    if (!applicationStarted)
                    {
                        // this will run only once per application start
                         this.OnStart(httpApplication);
                    }
                }
            }
            // this will run on every HttpApplication initialization in the application pool
            this.OnInit(httpApplication);
        }
        public virtual void OnStart(HttpApplication httpApplication)
        {            
            httpApplication.AddOnBeginRequestAsync(OnBegin, OnEnd);
        }
        private IAsyncResult OnBegin(object sender, EventArgs e, AsyncCallback cb, object extraData)
        {
            applicationStarted = true;
            var tcs = new TaskCompletionSource<object>(extraData);
            DoAsyncWork(HttpContext.Current).ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    tcs.SetException(t.Exception.InnerExceptions);
                }
                else
                {
                    tcs.SetResult(null);
                }
                if (cb != null) cb(tcs.Task);
            });
            return tcs.Task;
        }
        async Task DoAsyncWork(HttpContext ctx)
        {
            var client = new HttpClient();
            var result = await client.GetStringAsync("http://google.com");
            // USE RESULT
        }
        private void OnEnd(IAsyncResult ar)
        {
            Task t = (Task)ar;
            t.Wait();
        }
        /// <summary>Initializes any data/resources on HTTP module start.</summary>
        /// <param name="httpApplication">The application context that instantiated and will be running this module.</param>
        public virtual void OnInit(HttpApplication httpApplication)
        {
            // put your module initialization code here
        }
    }// end class
}// end namespace
I want to fire DoAsyncWork after each 5 minutes. Can you help me achieving that goal in that module?