如何在.NET中使用线程调用重复进程?

如何在.NET中使用线程调用重复进程?,.net,asp.net,multithreading,.net,Asp.net,Multithreading,在我的网站,我需要做一个重复的任务,不应该影响网站的主要活动和性能 所以我想我需要使用线程。我对.Net中的线程技术一无所知。如何使用线程是.NET 任何教程或对任何文章的引用都会有很大的帮助。这里有一个很棒的教程,介绍如何在另一个线程上完成工作的简单方法是使用 在web上处理其他线程上的繁重任务时,您可能希望使用Ajax启动请求,然后“轮询”以获得答案 MSDN上有一篇文章:,有点旧,但我认为你可以通过阅读它来获得基本的理解。在.NET中使用多线程有不同的方法。 如前所述,您可以使用Backg

在我的网站,我需要做一个重复的任务,不应该影响网站的主要活动和性能

所以我想我需要使用线程。我对.Net中的线程技术一无所知。如何使用线程是.NET


任何教程或对任何文章的引用都会有很大的帮助。

这里有一个很棒的教程,介绍如何在另一个线程上完成工作的简单方法是使用

在web上处理其他线程上的繁重任务时,您可能希望使用Ajax启动请求,然后“轮询”以获得答案


MSDN上有一篇文章:,有点旧,但我认为你可以通过阅读它来获得基本的理解。

在.NET中使用多线程有不同的方法。 如前所述,您可以使用BackgroundWorker,但也可以使用,这是推荐的方法,因为TPL在.NET中可用

这意味着您可以卸载需要在另一个线程上完成的工作,操作非常简单

Task.Factory.StartNew(() => DoSomeWork());
斯蒂芬·克利里的文章也是一本有趣的读物。它将BackGroundWorker与TPL进行了比较


另外,请记住,如果您在asp.net中执行长时间运行的任务,您的请求可能需要很长时间才能完成。在另一个服务中执行长时间运行的任务可能会更好,例如。

在ASP.NET应用程序中执行此操作的正确方法是使用
HostingEnvironment.QueueBackgroundWorkItem
。这可以确保在回收IIS应用程序、机器关闭或类似情况时,后台任务将正常关闭

在应用程序启动时的某个地方调用此命令一次:

HostingEnvironment.QueueBackgroundWorkItem(RunInBackground);
然后实现如下方法:

private async Task RunInBackground(CancellationToken cancellationToken)
{
    while (!cancellationToken.IsCancellationRequested)
    {
        // Repetetive task

        await Task.Delay(TimeSpan.FromMinutes(1));
    }
}

您还可以使用
HostingEnvironment.RegisterObject
手动执行更多操作。您可以获得一些控制权,但不那么简单。

您可以通过在Asp.Net网站中执行线程来实现这一点,但为后台进程创建单独的windows服务可能会容易得多。(读者请注意:我从这个老问题中删除了对资源/教程的请求,因为这类问题是离题的,但我改变了主意,因为接受的答案只不过是一个链接列表。如果今天问这个问题,它将被关闭,但由于它的年龄,它可能会逃避社区的限制。)第一个链接(在
www.yoda.arachsys.com
)生成一个404。您是修复还是删除?