Я не думаю, что переход от статического к экземпляру решит проблему, так как все они в конечном итоге конкурируют за статический ресурс (файл). Этот ответ может вам помочь.Возможно, если вы оставите оба метода статическими и объявите статический объект синхронизации для вызова потоков, с которыми нужно заблокировать потоки (поскольку сам ресурс является статическим), это поможет? Например:
private static object _objectLock = new object();
для синхронизации доступа к файлу из несколькихтемы, следовательно:
public static void Write(string msg)
{
lock(_objectLock)
{
using (var sw = GetStream())
{
sw.Write(msg);
}
}
}