开发者

How do I manage threads in a C# web app?

开发者 https://www.devze.com 2023-02-03 10:54 出处:网络
I built a little web application that displays charts. I was thinking that it might be useful for the superuser of the app to do a complete data refresh, however this process takes around 10 minutes t

I built a little web application that displays charts. I was thinking that it might be useful for the superuser of the app to do a complete data refresh, however this process takes around 10 minutes to complete. I was thinking perhaps the user could click a button that would start off a new thread to do a data refresh and subsequent clicks would kill the thread and restart the data population开发者_StackOverflow社区 process. The user would then be free to browse about the site and view the charts as their data is populated.

Is there a simple method of accomplishing something like this?


You can twist ASP.NET to do this sort of thing, but it violates a few good general rules for ASP.NET development -- and could really cause problems in a server farm.

So, the most obvious route is to do this work in a web service. You can have the method return a chunk of HTML if you want. You could also add status methods to see how the thread is progressing.


Other options include: Handing the intense processing off to a database server (sounds like this might be a good use of OLAP) or, another cheap trick might be to set up the click to fire off a scheduled task that runs on the server. Can you provide some additional detail about the environment? Single server? Data storage platform, version of .net?


Ok, I didn't use either answer so here is what I did. I decided that it would be better if subsequent clicks would terminate instead of the currently executing one. Thanks for your answers guys.

//code behind
protected void butRefreshData_Click(object sender, EventArgs e)
{
    Thread t = new Thread(new ThreadStart(DataRepopulater.DataRepopulater.RepopulateDatabase));
    t.Start();       
}

//DataRepopulater.cs
namespace DataRepopulater
{
    public static class DataRepopulater
    {
    private static string myLock = "My Lock";
    public static void RepopulateDatabase()
    {
        if(Monitor.TryEnter(myLock))
        {
            DoWork();
            Monitor.Exit(myLock);
        }
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消