2016-11-24 57 views
2

也许这个问题不走这里....用户需要为ThreadPool.QueueUserWorkItem

我使用ThreadPool.QueueUserWorkItem写一个文件夹/文件,我的问题是,当它试图写我UnauthorizedAccessException

所以我改变了目录,以授予每个人写作,它的工作原理。

但我不想授予每个人写信。它似乎是ThreadPool.QueueUserWorkItem使用的主线程不同的用户/组。

它应该是什么用户?

+0

这是一个在asp.net网站上运行的程序吗?还有,如果你使用主线程编写会发生什么? –

+0

正确,webaplication c#framework 4.0。主线程,我的意思是aspx中的进程,写入没有任何问题。 – Jamo

回答

2

因为它是一个IIS应用程序,所以您必须授予其权限的用户为the user the application pool runs under

您的主线程就像是模拟请求所针对的用户。后台工作项目不再与用户关联。 PS:在IIS中使用ThreadPool.QueueBackgroundWorkItem是a very bad idea,您需要在IIS中使用更适合的后台工作工具。

+0

有趣的答案!但它给我提出了很多问题。 ** 1。**是否会发生问题*仅*使用'ThreadPool.QueueUserWorkItem'恰恰是因为它在ASP.NET中不被真正推荐/支持? TPL(即'Task.StartNew')** 2。**即使它可能是建立在“ThreadPool”的基础之上,是否也会模仿? ** 3.如果ASP.NET中的所有异步内容都是不好的想法,那么ASP.NET有异步工具(例如异步HTTP处理程序)并且人们会遇到类似于OP的奇怪问题使用TPL的时间......? – stakx

+0

在IIS上启动后台线程通常不会完成,您已经位于线程池线程中,并且如果使用async之类的异步功能,请等待用户的上下文流程。有关详细信息,请参阅此文章https://msdn.microsoft.com/en-us/library/aa954062.aspx –

+0

应该为IIS提供适当的工具? – Jamo

相关问题