我有一个应用程序,用于将数据读写到不同的存储位置。存储池的概念包含多个存储设备。一次只能有一个设备处于活动状态以写入内容。最初,池中的第一个存储设备被认为是活动的。一旦它变满或无法访问,下一个设备就会变为活动状态。
我有一个带有以下接口的类ProviderManager。
public class DeviceManager
{
public StorageDevice CurrentDevice {get; private set;}
public bool MoveNext() { // get device on next index }
}
问题是我们只在有异常意味着填充或无法访问时才移动下一个设备。可能存在多个线程无法在设备上写入而且每个线程调用DeviceManager.MoveNext()而不是只调用其中一个线程的情况。
虽然,我可以管理它,但这涉及一些肮脏的工作。寻找一种很好的方法来管理它。
你的想法?
答案 0 :(得分:4)
怎么样
public bool MoveNext(StorageDevice oldDevice)
只要MoveNext是线程安全的,只需在更改前检查是否Current == oldDevice
。
答案 1 :(得分:0)
MoveNext()
{
if(Current.isAccessible)
return;
<....>
}
当然,MoveNext调用应该同步
答案 2 :(得分:0)
为什么你甚至将MoveNext
暴露给来电者?根据您的描述,我认为DeviceManager
应负责处理错误并转移到下一个设备。
是否有某种方法可以让DeviceManager
拦截写异常?