Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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#_Multithreading - Fatal编程技术网

C# 无法访问文件,因为它是';它被另一个进程使用

C# 无法访问文件,因为它是';它被另一个进程使用,c#,multithreading,C#,Multithreading,我正在一个程序中使用。此库可以使用缓存更快地加载电视剧。为了进一步提高节目的速度,我在不同的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存读/写时,我将得到以下错误: 进程无法访问该文件 “C:\BinaryCache\79349\series\u 79349.ser”,因为它正被 另一个过程 有人知道如何避免这种情况,并且程序仍能顺利运行吗?CacheProvider不是为在多线程场景中使用而构建的。。。只能在一个线程中使用它,或者通过共享的对象在每次访问时锁定它,或者为每个线程提供

我正在一个程序中使用。此库可以使用缓存更快地加载电视剧。为了进一步提高节目的速度,我在不同的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存读/写时,我将得到以下错误:

进程无法访问该文件 “C:\BinaryCache\79349\series\u 79349.ser”,因为它正被 另一个过程


有人知道如何避免这种情况,并且程序仍能顺利运行吗?

CacheProvider
不是为在多线程场景中使用而构建的。。。只能在一个线程中使用它,或者通过共享的
对象
在每次访问时锁定它,或者为每个线程提供它自己的
缓存提供程序
和它自己独特的
\u根目录(在构造函数中)。

缓存提供程序
不是为多线程场景使用而构建的。。。可以仅在一个线程中使用它,或者在每次通过共享的
对象进行访问时使用
lock
,或者为每个线程提供自己的
CacheProvider
和自己独特的
\u root
目录(在构造函数中)。

您可以使用lock语句确保只有一个线程同时访问缓存:


您可以使用lock语句确保只有一个线程同时访问缓存:


根据错误,我假设TvdbLib不支持多个并发线程访问同一缓存。因为它是一个开源项目,所以您可以获取源代码并围绕缓存访问实现您自己的保护,例如,使用lock语句。当然,在调用TvdbLib之前,您可以在自己的代码中进行锁定,但由于这将是一个更高的级别,因此锁定将保持更长的时间,并且您可能无法获得所需的细粒度并发性。

从错误中,我假设TvdbLib不支持多个并发线程访问同一缓存。因为它是一个开源项目,所以您可以获取源代码并围绕缓存访问实现您自己的保护,例如,使用lock语句。当然,在调用TvdbLib之前,您可以在自己的代码中进行锁定,但由于这将是一个更高的级别,因此锁定将保持更长的时间,并且您可能无法获得所需的细粒度并发性