2015-06-16 269 views
1

我有一个.NET Web服务[WCF托管在IIS],现在需要实现一个将长期运行的任务的方法。 该实现的最佳实践是为了避免阻塞ASP.NET线程池中的线程?
此外,在WCF中使用任务并行库[TPL]有意义吗? 非常感谢您的支持Web服务中长时间运行的任务

+0

我建议使用异步/等待模式。如果正确实施,它不会阻止并更有效地使用资源。 –

+0

你的意思是,异步/等待模式也可以,如果WCF是IIS托管的?它不会抓住ASP.NET线程池中的线程吗?那么在WCF中使用TPL呢? – defelix

+0

我忘了说长时间运行的任务是CPU绑定的,而不是I/O绑定的。 – defelix

回答

2

池中的线程并不是真正的稀缺资源。除非你打算同时消费数百个,这是不值得担心的。

长时间运行的后台任务最好实现为LongRunningTask。一定要抓住任何错误,以便了解错误。

另请注意,当工作进程关闭(部署,崩溃,重新引导,...)时,后台工作可随时消失。

最简单的方法是不做后台工作。也许客户端可以运行一个非常长的运行WCF请求,并在请求线程上执行所有这些。这为您处理线程和错误。