我创建并行任务,这些任务使用相同的静态列表,我知道虽然编码多线程应用程序锁定足以使列表线程安全,但它是否也适用于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);
或两个并行任务是否可以达到同一个列表?
答案 0 :(得分:1)
如果您只是从列表中读取并且同时没有更改列表,那么甚至不需要使用该锁定块。
如果你在某个地方改变它,你应该担心线程安全。