C# 管理多线程的存储池

C# 管理多线程的存储池,c#,.net,C#,.net,我有一个应用程序,用于将数据读写到不同的存储位置。有一个包含多个存储设备的存储池概念。一次只能有一台设备处于活动状态,用于写入内容。最初,池中的第一个存储设备被认为是活动的。一旦设备满了或无法访问,下一个设备就应该处于活动状态 我有一个具有以下接口的类ProviderManager public class DeviceManager { public StorageDevice CurrentDevice {get; private set;} public bool

我有一个应用程序,用于将数据读写到不同的存储位置。有一个包含多个存储设备的存储池概念。一次只能有一台设备处于活动状态,用于写入内容。最初,池中的第一个存储设备被认为是活动的。一旦设备满了或无法访问,下一个设备就应该处于活动状态

我有一个具有以下接口的类ProviderManager

public class DeviceManager
{
      public StorageDevice CurrentDevice {get; private set;}
      public bool MoveNext() { // get device on next index }
}
问题是,只有当出现异常时,我们才会移动下一个设备,这意味着它已被填充或无法访问。可能存在这样一种情况:多个线程无法在设备上写入,每个线程都会调用DeviceManager.MoveNext(),而不是只调用其中一个线程

虽然我能应付,但那涉及到一些肮脏的工作。正在寻找一种很好的管理方法

你的想法?

怎么样

   public bool MoveNext(StorageDevice oldDevice)
只要MoveNext是线程安全的,只需在更改之前检查
Current==oldDevice

MoveNext()
MoveNext()
{
   if(Current.isAccessible)
        return;
   <....>
}
{ 如果(当前可访问) 返回; }

当然,MoveNext调用应该是同步的

为什么还要向调用方公开
MoveNext
?根据您的描述,我认为
DeviceManager
应该负责处理错误并转移到下一个设备


是否有某种方法可以让
DeviceManager
拦截写入异常?

DeviceManager由另一个名为StorageAdapter的类使用。StorageAdapter在DeviceManager.Current上调用所有读写操作。因此,当出现任何异常时,StorageAdapter必须调用MoveNext。