모노 스트림으로 작업하는 동안 정말 이상한 문제가 있습니다. 나는이 같은 스트림을 엽니 물론 _stream이하여 FileStream입니다스트림/파일의 소유권을 포기하십시오.
_stream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
. 나는 그런이 클래스의 처분 방법을 추가 :
public override void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!_disposed)
{
if(disposing)
{
_stream.Flush(true);
_stream.Dispose();
_items.Clear();
}
_disposed = true;
}
}
지금 내가이 간단한 테스트가 있습니다
[Test]
public void SimpleTest()
{
SyncFileWriter s = new SyncFileWriter("file");
s.Save("a", "b");
s.Dispose();
SyncFileWriter s2 = new SyncFileWriter("file");
s2.Dispose();
}
을하지만 IOException를 표시해 실패하는 경우 : 공유 위반. [edit] monodevelop에 오류가있는 것처럼 보입니다. 다시 시작했지만 매번 실패합니다 [편집]
이 문제를 방지하고 스트림을 올바르게 닫으려면 어떻게해야합니까?
이것은 간단한 타이밍 문제 일 수 있습니다 (Win 파일 시스템은 느려질 수 있음). 다시 테스트하기 전에'Thread.Sleep (10); '으로 테스트하고 해결할 수 있습니다. –
시스템이 멀티 스레드입니까? non-deterministic은 경쟁 조건과 다른 스레드 (예 : 명시 적으로 또는 이벤트를 통해 생성 된 스레드)에 동시에 존재하는 두 가지가 있을지 여부를 생각하게합니다. – Chris
흠. 심지어 Thread.Sleep (1000)은 어떤 진보도하지 않을 것입니다. 물론 내 시스템은 다중 코드가 있지만 NUnit이며 한 번에 하나의 테스트 만 실행되도록해야합니다. 그래서 이것은 문제가 아닙니다. – hellow