public void WriteOne(T value) { lock (this.writeLock) { OneTimeBufferHelper helper; lock (((ICollection)this.helperList).SyncRoot) { if (this.helperList.Count == 0) { this.helperList.AddFirst(new OneTimeBufferHelper(this.fragmentation)); } helper = this.helperList.Last.Value; } bool written = false; while (!written) { written = helper.WriteOne(value); if (!written) { lock (((ICollection)this.helperList).SyncRoot) { helper = new OneTimeBufferHelper(this.fragmentation); this.helperList.AddLast(helper); } } } } }
public void Write(T[] buffer, int offset, int count) { lock (this.writeLock) { OneTimeBufferHelper helper; lock (((ICollection)this.helperList).SyncRoot) { if (this.helperList.Count == 0) { this.helperList.AddFirst(new OneTimeBufferHelper(this.fragmentation)); } helper = this.helperList.Last.Value; } var writtenData = 0; while (writtenData < count) { int tryWrite = count - writtenData; var realWritten = helper.Write(buffer, offset, tryWrite); writtenData += realWritten; offset += realWritten; if (helper.IsFull) // helper buffer full { helper = new OneTimeBufferHelper(this.fragmentation); lock (((ICollection)this.helperList).SyncRoot) { this.helperList.AddLast(helper); } } } } }