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

时间:2011-01-22 13:01:47

标签: .net asp.net multithreading

在我的网站上,我需要做一个不会影响网站主要活动和表现的重复性任务。

所以我认为我需要使用线程。我是.Net的新线程。如何使用线程是.NET?

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

3 个答案:

答案 0 :(得分:1)

这是一个很好的教程,关于如何做multi-threaded applications in .NET在另一个线程上完成工作的简单方法是使用BackgroundWorker

当通过Web在其他线程上处理繁重的任务时,您可能希望使用Ajax发起请求,然后“轮询”以获得答案。

MSDN上有一篇文章:Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code,它有点陈旧但我认为你可以通过阅读来获得基本的理解。

答案 1 :(得分:0)

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

这意味着您可以卸载需要在另一个线程上完成的工作,就像

一样简单
function handleClick() {
  const mapEl = document.querySelector("#map")
  new google.maps.Map(mapEl, {
    center: { lat: -25.363, lng: 131.044 },
    zoom: 8
  });
}

someButton.addEventListener("click", handleClick);
来自Stephen Cleary的文章{p 3}也是一本有趣的读物。它将BackGroundWorker与TPL进行比较。

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

答案 2 :(得分:0)

在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并手动执行更多操作。你会获得一些控制权,但不那么简单。