NET中实现后台进程线程

NET中实现后台进程线程

本文介绍了正确地在ASP.NET中实现后台进程线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要执行一个无限while循环,并希望发起的Global.asax 执行。
我的问题是我应该究竟如何做到的呢?我应该开始一个新的线程或我应该使用异步和任务或别的什么吗?里面的while循环,我需要做等待TaskEx.Delay(5000);

I need to execute an infinite while loop and want to initiate the execution in global.asax.My question is how exactly should I do it? Should I start a new Thread or should I use Async and Task or anything else? Inside the while loop I need to do await TaskEx.Delay(5000);

我如何做到这一点,所以它不会阻止任何其他进程,并不会造成内存泄漏?

How do I do this so it will not block any other processes and will not create memory leaks?

我使用VS10,AsyncCTP3,MVC4

编辑:

 public void SignalRConnectionRecovery()
        {
            while (true)
            {
                Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
                await TaskEx.Delay(5000);
            }
        }

所有我需要做的是作为一个单一实例,只要全球的应用可以运行此。

All I need to do is to run this as a singleton instance globally as long as application is available.

编辑:解决

这是在Global.asax中最终解决方案

This is the final solution in Global.asax

protected void Application_Start()
{
    Thread signalRConnectionRecovery = new Thread(SignalRConnectionRecovery);
    signalRConnectionRecovery.IsBackground = true;
    signalRConnectionRecovery.Start();

    Application["SignalRConnectionRecovery"] = signalRConnectionRecovery;
}


protected void Application_End()
{
    try
    {
        Thread signalRConnectionRecovery = (Thread)Application["SignalRConnectionRecovery"];
        if (signalRConnectionRecovery != null && signalRConnectionRecovery.IsAlive == true)
        {
            signalRConnectionRecovery.Abort();
        }
    }
    catch
    {
            ///
    }
}

我发现了有关如何使用异步工人这个漂亮的文章:http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx

和这样的:

但我认为我需要这将是一个完美的:

But I think for my needs this one will be perfect:http://forums.asp.net/t/1433665.aspx/1

这篇关于正确地在ASP.NET中实现后台进程线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 20:09