2016-04-18 20 views
0

私は並列タスクを作成し、これらのタスクは同じ静的リストを使用しています。マルチスレッドアプリケーションのロックをコーディングしながらリストのスレッドセーフを作成するのに十分ですが、TPLでも使えますか?TPL一般的なリストの使用

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); 

2つの並列タスクが同じリストに到達できるかどうかを確認します。

+0

コードを実際に見ることなく、言い表せません。他のスレッドは 'List'にどのようにアクセスしますか? – svick

答えて

1

リストから読み込んでいて、リストが変更されていない場合は、そのロックブロックを使用する必要はありません。

あなたがどこかに変更している場合はスレッドセーフが心配です。

関連する問題