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

piztneat  于 2022-11-19  发布在  .NET
关注(0)|答案(3)|浏览(144)

在我的网站,我需要做一个重复的任务,不应该影响网站的主要活动和性能。
所以我想我需要使用线程。我是Iternet中线程的新手。如何使用线程是Iternet?
任何教程或参考任何文章将是一个很大的帮助。

dfty9e19

dfty9e191#

这里有一个关于如何执行multi-threaded applications in .NET的很棒的教程。在另一个线程上完成工作的一个简单方法是使用BackgroundWorker
在Web上处理其他线程上的繁重任务时,您可能希望使用 AJAX 发起请求,然后“轮询”答案。
MSDN上有一篇文章:Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code,它有点老,但我认为你可以通过阅读它得到一个基本的理解。

mrphzbgm

mrphzbgm2#

在 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 , 更 多 地 手动 完成 事情 。 你 会 获得 一些 控制 权 , 但 会 不 那么 简单 。

bfnvny8b

bfnvny8b3#

在. NET中使用多线程有多种不同的方法。如前所述,您可以使用BackgroundWorker,但也可以使用Task based Asynchronous Programming,这是推荐的方法,因为.NET中提供了TPL
这意味着您可以将需要在另一个线程上完成的工作卸载,就像

Task.Factory.StartNew(() => DoSomeWork());

Stephen Cleary的This文章也是一本有趣的读物,它将BackGroundWorker与TPL进行了比较。
此外,请记住,如果您在www.example.com中执行长时间运行的任务asp.net,您的请求可能需要很长时间才能完成。在其他服务中执行长时间运行的任务可能会更好,例如Hangfire

相关问题