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".
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.
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
Merci de vos conseils !!
Partager