有人知道QueueBackgroundWorkItem如何管理其线程吗?
例如,我的API中有一段代码如下,它遍历电子邮件地址列表并将电子邮件发送到每个地址:
foreach (var address in addresses)
{
HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken =>
{
var emailService = new EmailerService();
await emailService.SendEmail(cancellationToken, address);
});
}
更详细地讲,我的问题是... IIS将自行管理QueueBackgroundWorkItem创建的线程,而我不需要执行任何操作,还是说,如果我有5000+个地址,创建5000+个线程,并且杀死我的应用程序?
答案 0 :(得分:1)
不是IIS
管理哪个管理,而是服务执行平台的工作进程或运行时。在这种情况下,ASP.Net run time
。
在ASP.NET管理的AppDomain
中完成的管理工作项(计划的工作程序)的整个过程。您不需要做任何特定的事情,因为它与上下文无关,因此一旦排队,它最终可能会执行完成。这个词在这里最终意味着很多,因为由于逻辑/取消/应用程序域关闭(自动或显式)中的异常而不能保证执行。
关于this的主题有一个详细的博客,可以帮助您进一步加以阐明。