Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to schedule a C# code execution

I am using ASP.Net and C#. I want to synchronise something on a particular time. I made a method for doing this and it's working. But my problem is how to call this method daily at a particular time.

Client doesn't trust any third party tool, so can't use it.

Windows service is not a good solution.

If I make a web service, how should I call it at a particular time on a daily basis?

For example, I want to run method everyday at 07.00 PM.

like image 702
Pankaj Tiwari Avatar asked Jan 17 '23 13:01

Pankaj Tiwari


1 Answers

At startup, add an item to the HttpRuntime.Cache with a fixed expiration. When cache item expires, do your work, such as WebRequest or what have you. Re-add the item to the cache with a fixed expiration.

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)
{
    AddTask("DoStuff", 60);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}

public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));
}
like image 59
Raab Avatar answered Jan 20 '23 16:01

Raab