2016-04-18 13 views
0

Ich erstelle parallele Aufgaben und diese Aufgaben verwendet die gleichen statischen Listen, ich weiß, dass während der Programmierung Multithread Application Lock ist genug, um Listen threadsafe, aber funktioniert es auch mit TPL?TPL generische Liste Verwendung

public static TSource FirstOrDefaultThreadSafe<TSource>(this List<TSource> source, Func<TSource, bool> predicate) where TSource : new() 
    { 
     var result=new TSource(); 
     try 
     {    
       lock (source) 
       { 
        result = source.FirstOrDefault(predicate);         
      }     
     } 
     catch (System.Exception ex) 
     {     
      throw ex; 
     } 


Task.Factory.StartNew(() => FirstOrDefaultThreadSafe(List,predicate), TaskCreationOptions.LongRunning); 

oder wenn zwei parallele Aufgabe zur gleichen Liste erreichen können?

+0

Es ist schwer zu sagen, ohne tatsächlich mehr von Ihrem Code zu sehen: z. Wie greift der andere Thread auf die 'List' zu? – svick

Antwort

1

Wenn Sie gerade von der Liste lesen und die Liste in der Zwischenzeit nicht geändert wird, ist es sogar nicht nötig, diesen Sperrblock zu verwenden.

Sie sollten sich Sorgen um die Fadensicherheit machen, wenn Sie sie irgendwo wechseln.