在我的网站上,我需要做一个不会影响网站主要活动和表现的重复性任务。
所以我认为我需要使用线程。我是.Net的新线程。如何使用线程是.NET?
任何教程或对任何文章的引用都会有很大的帮助。
答案 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
并手动执行更多操作。你会获得一些控制权,但不那么简单。