首页 > 解决方案 > QueueBackgroundWorkItem 如何管理线程

问题描述

有谁知道 QueueBackgroundWorkItem 如何管理它的线程?

比如说,我的 API 中有如下代码块,它遍历电子邮件地址列表并向每个地址发送一封电子邮件:

foreach (var address in addresses)
{
    HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken =>
    {
        var emailService = new EmailerService();
        await emailService.SendEmail(cancellationToken, address);
    });
}

更详细地说,我的问题是...... IIS 是否会自行管理由 QueueBackgroundWorkItem 创建的线程,我不需要做任何事情,或者说如果我有 5000 多个地址,创建 5000 多个线程并杀死我的应用程序?

标签: c#asp.netasp.net-web-api

解决方案


管理这个的不是IIS管理器,而是服务于执行平台的工作进程或运行时。在这种情况下,ASP.Net run time。在 ASP.NET 管理的AppDomain. 您不需要做任何具体的事情,因为它与上下文无关,因此一旦排队,它最终可能会执行完成。这个词最终在这里意味着很多,因为由于逻辑/取消/应用程序域自动或显式关闭中的异常,无法保证执行。

有一个关于这个主题的详细博客,它将帮助您进一步澄清它。


推荐阅读