Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程被拒绝访问文件(更新模拟)_C#_Asp.net Mvc - Fatal编程技术网

C# 线程被拒绝访问文件(更新模拟)

C# 线程被拒绝访问文件(更新模拟),c#,asp.net-mvc,C#,Asp.net Mvc,在MVC.NET应用程序中,我在控制器上执行了一个操作,该操作接收一些文档并进行一些处理。处理过程可能需要很长时间才能完成,因此我决定启动一个线程来完成这项工作,而用户可以继续进行更多的工作。然而,当我开始一个新的线程通过 Thread thread = new Thread(finishedDocument.SplitAndIndex); thread.Start(); 该线程获取一个UnauthorizedAccessException。方法是访问服务器上的一些文件,但如果我只是finis

在MVC.NET应用程序中,我在控制器上执行了一个操作,该操作接收一些文档并进行一些处理。处理过程可能需要很长时间才能完成,因此我决定启动一个线程来完成这项工作,而用户可以继续进行更多的工作。然而,当我开始一个新的线程通过

Thread thread = new Thread(finishedDocument.SplitAndIndex);
thread.Start();
该线程获取一个UnauthorizedAccessException。方法是访问服务器上的一些文件,但如果我只是
finishedDocument.SplitAndIndex
(所以不是在线程内)运行正常。我已经确保了所有资源都被释放,但即使是为了测试是否是这样,我在那里放了一个名为test.txt的文件,我的应用程序中唯一涉及它的部分是在该方法中,但我仍然得到了错误

我认为线程应该具有与创建它的进程/线程相同的权限/特权。不是这样吗?有什么我应该做的吗?我在这里真的不知所措,任何帮助都会很好

更新
我知道这与模拟有关,但我现在似乎找不到线程安全的方法来进行模拟。

尝试使用该任务执行同样的操作stuff@TheBeardedLlama谢谢你的建议,我试过了,但它也做了同样的事情。在asp.net中,“启动一个线程来做工作,而用户可以继续做更多的工作”是非常危险的事情。你真的不应该在网站内部做那些在页面生命周期中幸存下来的工作。要么使用一个降低风险的框架,比如编写一个外部程序或服务,可以在IIS之外运行的服务器上运行,以完成长期运行的工作。@Tyler如果你通过了正确的选项(Intelissense和MSDN是你的朋友;)。我同意@ScottChamberlain关于hangfire;我已经在长时间运行的任务中大量使用了它,尽管如果你只有一件事,那就有点过分了……试着用这个任务做同样的事情stuff@TheBeardedLlama谢谢你的建议,我试过了,但它也能做同样的事情。做“启动一个线程来完成工作,而用户可以开始做更多的工作”在asp.net中是非常危险的事情。你真的不应该在网站内部做那些在页面生命周期中幸存下来的工作。要么使用一个降低风险的框架,比如编写一个外部程序或服务,可以在IIS之外运行的服务器上运行,以完成长期运行的工作。@Tyler如果你通过了正确的选项(Intelissense和MSDN是你的朋友;)。我同意@ScottChamberlain关于hangfire;我已经在长时间运行的任务中大量使用了它,尽管如果你只有一件东西,那就有点过分了。。。