TPL通用列表用法

时间:2016-04-18 14:54:32

标签: c# task-parallel-library

我创建并行任务,这些任务使用相同的静态列表,我知道虽然编码多线程应用程序锁定足以使列表线程安全,但它是否也适用于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);  

或两个并行任务是否可以达到同一个列表?

1 个答案:

答案 0 :(得分:1)

如果您只是从列表中读取并且同时没有更改列表,那么甚至不需要使用该锁定块。

如果你在某个地方改变它,你应该担心线程安全。