此代码有什么问题。它挂起:
public static IEnumerable<Piece> allPiecesList;
private static ConcurrentDictionary<string, Piece> allPiecesCD = new ConcurrentDictionary<string, Piece>();
using (var dc = new MyDataContext())
{
allPiecesList = dc.PopulateAllPieces("A").ToList();
Parallel.ForEach(allPiecesList , (piece) => allPiecesCD.TryAdd(piece.Name, piece));
}
注意:PopulateAllPieces使用Linq to SQL。但是,这一切都已完成,并且在Parallel部分启动之前我们有一个IEnumerable。
MyDataContext是一个linq to sql数据上下文。 Piece.Name是一个不进行任何计算的访问器属性。基本上,PopulateAllPieces从数据库返回一组记录。这些记录中的每一个都是“片段”对象。 Piece.Name公开数据库中名为“Name”的列。