这段代码有什么问题。它挂起:
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。然而,这一切都完成了,在并行部分开始之前我们有一个 IEnumerable。
MyDataContext 是一个 linq to sql 数据上下文。Piece.Name 是一个不进行任何计算的访问器属性。基本上,PopulateAllPieces 从数据库返回一组记录。这些记录中的每一个都是一个“片段”对象。Piece.Name 在数据库中公开名为“名称”的列。