L'écriture dans le fichier dans un thread de manière sûre

Écrit Stringbuilder de fichier en mode asynchrone. Ce code prend le contrôle d'un fichier, écrit un ruisseau et la libère. Il traite les demandes des opérations asynchrones, ce qui peut venir à tout moment.

La FilePath est définie par instance de classe (de sorte que le verrou Object est par exemple), mais il existe un potentiel de conflit depuis ces classes peuvent partager FilePaths. Ce genre de conflit, ainsi que tous les autres types de l'extérieur de l'instance de classe, serait traitée avec de nouvelles tentatives.

Est ce code approprié pour ses fins? Est-il une meilleure façon de gérer ce qui signifie moins (ou pas) l'utilisation de la capture et de réessayer de mécanicien?

Aussi comment puis-je éviter d'attraper les exceptions qui ont eu lieu pour d'autres raisons.

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();
    }
Votre fichier, l'écrit ne sont pas asynchrone. Vouliez-vous dire pour eux?
oui, il y avait au départ, mais vous ne devriez pas attendre de choses dans une serrure, donc j'ai dû le changer. Je ne sais pas dans quelle mesure qui porte atteinte à l'ensemble de la chose.
Cela sonne comme il devrait être sur codereview tbh
Peut-être. Merci pour votre aide en tout cas.
Il existe d'autres Processus trhat pourrait accès Chemin d'accès? Parce que pour la seule application de la simultanéité vous pouvez supprimer la plupart de code.

OriginalL'auteur Nathan Cooper | 2014-05-07