작은 로거를 작성 중이며 로그 파일을 한 번 열어서 로그 메시지가 도착하면 응답을 계속 작성하고 프로그램 종료시 모든 내용을 처리하려고합니다.반응 프로그래밍을 사용하여 FileStream을 열어 쓰기 위해 작성
FileStream을 열린 상태로 유지할 수있는 방법이 확실하지 않습니다. 및 메시지가 도착하면 반응적으로 작성합니다.
큐를 사용하는 using
문 내부의 루프와 버퍼로 동작하는 ConcurrentQueue가있는 이전 솔루션에서 디자인을 업데이트하고 싶습니다.
특히, 나는 동시에using
문 구조를 활용 원하는, 그래서 명시 적으로 스트림과 작가를 닫습니다하지 않으며, 반응, loopless 프로그래밍 스타일의. 현재 나는 한 번에 이러한 구조 중 하나를 사용하는 방법을 알고 있습니다 : using
/루프 조합 또는 명시 적 스트림 닫기/반응 조합. 당신은 Observable.Using
를 사용할 필요가
BufferBlock<LogEntry> _buffer = new BufferBlock<LogEntry>();
// CONSTRUCTOR
public DefaultLogger(string folder)
{
var filePath = Path.Combine(folder, $"{DateTime.Now.ToString("yyyy.MM.dd")}.log");
_cancellation = new CancellationTokenSource();
var observable = _buffer.AsObservable();
using (var stream = File.Create(_filePath))
using (var writer = new StreamWriter(stream))
using (var subscription = observable.Subscribe(entry =>
writer.Write(GetFormattedString(entry))))
{
while (!_cancellation.IsCancellationRequested)
{
// what do I do here?
}
}
}