Bonjour,

Voila je dispose d'une classe d'outils qui n'est qu'une liste de méthode Shared (Static) permettant d'enregistrer des fichiers de logs.

Ces méthodes sont utilisées dans un context multithread pour enregistrer les erreurs de traitements des travaux.
Chaque thread travaillant sur un "travail" different je sais qu'il n'est pas possible que 2 threads utilisent le même fichier car j'utilise un ID unique pour chaque travail que je place dans le nom du fichier de log.

Cependant y a t il un risque ici à utiliser des methodes Shared sans verrou ?
Dans ces methodes, il n'y a aucun appelle à d'autre variable "Shared".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Overloads Shared Sub LogException(ByVal RaisedException As System.Exception, ByVal ApplicationMessage As String, ByVal ID as String)
 
            Dim AppLogFile As String = My.Application.Info.DirectoryPath.Substring(0, 3)
            AppLogFile &= My.Application.Info.ProductName
            AppLogFile &= IO.Path.DirectorySeparatorChar
 
            If Not My.Computer.FileSystem.DirectoryExists(AppLogFile) Then
                My.Computer.FileSystem.CreateDirectory(AppLogFile)
            End If
            AppLogFile &= ID & "_LogException.txt"
 
            Using swLogWriter As StreamWriter = File.AppendText(AppLogFile)
 
                swLogWriter.WriteLine("-------------------------------Start Log Entry-------------------------------")
                If Not IsNothing(RaisedException) Then
                    LogExceptionOnFile(RaisedException, ApplicationMessage, swLogWriter, False)
                Else
                    LogExceptionOnFile(New System.Exception("No Exception To Log"), ApplicationMessage, swLogWriter, False)
                End If
                swLogWriter.WriteLine("-------------------------------End Log Entry---------------------------------")
                swLogWriter.Close()
            End Using
 
    End Sub
Si potentiellement problème il y a, en n'utilisant plus de methodes partagées et en creant dans chaque thread une instance de la classe de log le problème est il résolu ? On même envisage de ne créer cette instance que dans le Catch pour ne pas instancier un nouvel objet si le traitement ce passe bien.

Merci de vos conseils !!