Запись в файл потокобезопасным способом

ПишуStringbuilder подать асинхронно. Этот код получает контроль над файлом, записывает в него поток и освобождает его. Он обрабатывает запросы от асинхронных операций, которые могут поступать в любое время.

FilePath устанавливается для экземпляра класса (поэтому блокировкаObject в каждом случае), но существует вероятность конфликта, поскольку эти классы могутFilePaths, Этот тип конфликта, как и все другие типы вне экземпляра класса, будет рассматриваться при повторных попытках.

Этот код подходит для своей цели? Есть ли лучший способ справиться с этим, который подразумевает меньшую (или отсутствие) зависимость от механики улова и повтора?

Также, как мне избежать перехвата исключений, которые произошли по другим причинам.

public string Filepath { get; set; }
private Object locker = new Object();

public async Task WriteToFile(StringBuilder text)
    {
        int timeOut = 100;
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        while (true)
        {
            try
            {
                //Wait for resource to be free
                lock (locker)
                {
                    using (FileStream file = new FileStream(Filepath, FileMode.Append, FileAccess.Write, FileShare.Read))
                    using (StreamWriter writer = new StreamWriter(file, Encoding.Unicode))
                    {
                        writer.Write(text.ToString());
                    }
                }
                break;
            }
            catch
            {
                //File not available, conflict with other class instances or application
            }
            if (stopwatch.ElapsedMilliseconds > timeOut)
            {
                //Give up.
                break;
            }
            //Wait and Retry
            await Task.Delay(5);
        }
        stopwatch.Stop();
    }

Ответы на вопрос(2)

Ваш ответ на вопрос