C# 无法访问文件,因为它是';它被另一个进程使用
我正在一个程序中使用。此库可以使用缓存更快地加载电视剧。为了进一步提高节目的速度,我在不同的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存读/写时,我将得到以下错误: 进程无法访问该文件 “C:\BinaryCache\79349\series\u 79349.ser”,因为它正被 另一个过程C# 无法访问文件,因为它是';它被另一个进程使用,c#,multithreading,C#,Multithreading,我正在一个程序中使用。此库可以使用缓存更快地加载电视剧。为了进一步提高节目的速度,我在不同的线程上加载所有电视剧。当两个线程同时运行并尝试同时从缓存读/写时,我将得到以下错误: 进程无法访问该文件 “C:\BinaryCache\79349\series\u 79349.ser”,因为它正被 另一个过程 有人知道如何避免这种情况,并且程序仍能顺利运行吗?CacheProvider不是为在多线程场景中使用而构建的。。。只能在一个线程中使用它,或者通过共享的对象在每次访问时锁定它,或者为每个线程提供
有人知道如何避免这种情况,并且程序仍能顺利运行吗?
CacheProvider
不是为在多线程场景中使用而构建的。。。只能在一个线程中使用它,或者通过共享的对象在每次访问时锁定它,或者为每个线程提供它自己的缓存提供程序和它自己独特的\u根目录(在构造函数中)。缓存提供程序不是为多线程场景使用而构建的。。。可以仅在一个线程中使用它,或者在每次通过共享的对象进行访问时使用lock
,或者为每个线程提供自己的CacheProvider
和自己独特的\u root
目录(在构造函数中)。您可以使用lock语句确保只有一个线程同时访问缓存:
您可以使用lock语句确保只有一个线程同时访问缓存:
根据错误,我假设TvdbLib不支持多个并发线程访问同一缓存。因为它是一个开源项目,所以您可以获取源代码并围绕缓存访问实现您自己的保护,例如,使用lock语句。当然,在调用TvdbLib之前,您可以在自己的代码中进行锁定,但由于这将是一个更高的级别,因此锁定将保持更长的时间,并且您可能无法获得所需的细粒度并发性。从错误中,我假设TvdbLib不支持多个并发线程访问同一缓存。因为它是一个开源项目,所以您可以获取源代码并围绕缓存访问实现您自己的保护,例如,使用lock语句。当然,在调用TvdbLib之前,您可以在自己的代码中进行锁定,但由于这将是一个更高的级别,因此锁定将保持更长的时间,并且您可能无法获得所需的细粒度并发性