Является ли автоматическая очистка в TextWriter Synchronized?
Я проверил этот код в отладке. Файл существует, когда он выполняется, и содержимое строки имеет некоторый текст.
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
Тем не менее, файл пуст после выполнения этой строки. Flush автоматически запускается в Synchronized? Может ли быть что-нибудь еще, что мешает работе WriteLine?
1 ответ
Нет, нет автоматического Flush
вызывать после каждого метода.
TextWriter.Synchronized
только гарантирует безопасность потоков - это означает, что это предотвратит одновременное выполнение несколькими потоками вызовов экземпляра. Кроме того, нет никаких дополнительных гарантий.
Обратите внимание, что это значительно снизит производительность модуля записи, если он будет вносить изменения после каждой операции.
Если вам нужно уточнить, как реализован код - посмотрите на источник - https://referencesource.microsoft.com/ и наблюдайте, что все методы являются простыми обертками для вызова, переданными в Writer с MethodImplOptions.Synchronized
добавлено для обеспечения безопасности потока:
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override void Write(char value) {
_out.Write(value);
}