Note that there are some explanatory texts on larger screens.

plurals
  1. POBug in parallel tree printing method
    primarykey
    data
    text
    <p>Classes:</p> <pre><code>public class Tree { public Node RootNode { get; set; } } public class Node { public int Key { get; set; } public object Value { get; set; } public Node ParentNode { get; set; } public List&lt;Node&gt; Nodes { get; set; } } </code></pre> <p>Methods:</p> <p>This method generates a tree.</p> <pre><code>private static int totalNodes = 0; static Tree GenerateTree() { Tree t = new Tree(); t.RootNode = new Node(); t.RootNode.Key = 0; t.RootNode.Nodes = new List&lt;Node&gt;(); Console.WriteLine(t.RootNode.Key); List&lt;Node&gt; rootNodes = new List&lt;Node&gt;(); rootNodes.Add(t.RootNode); while (totalNodes &lt;= 100000) { List&lt;Node&gt; newRootNodes = new List&lt;Node&gt;(); foreach (var rootNode in rootNodes) { for (int j = 0; j &lt; 3; j++) { totalNodes++; Console.Write(string.Format(" {0}({1}) ", totalNodes, rootNode.Key)); Node childNode = new Node() {Key = totalNodes, Nodes = new List&lt;Node&gt;(), ParentNode = t.RootNode}; rootNode.Nodes.Add(childNode); newRootNodes.Add(childNode); } Console.Write(" "); } Console.WriteLine(); rootNodes = newRootNodes; } return t; } </code></pre> <p>This method is supposed to print a tree, but node is null in some case:</p> <pre><code> static void PrintTreeParallel(Node rootNode) { List&lt;Node&gt; rootNodes = new List&lt;Node&gt;(); List&lt;Node&gt; newRootNodes = new List&lt;Node&gt;(); rootNodes.Add(rootNode); Console.WriteLine(rootNode.Key); while (rootNodes.Count &gt; 0) { newRootNodes = new List&lt;Node&gt;(); Parallel.ForEach(rootNodes, node =&gt; { if (node != null) { Console.Write(string.Format(" {0} ", node.Key)); if (node.Nodes != null) Parallel.ForEach(node.Nodes, newRoot =&gt; { newRootNodes.Add(newRoot); }); } else { //HOW CAN WE GET HERE????? Debugger.Break(); Console.WriteLine(rootNodes.Count); } }); Console.WriteLine(); rootNodes = newRootNodes; } } </code></pre> <p>Execute:</p> <pre><code> static void Main(string[] args) { var t = GenerateTree(); Console.WriteLine("Tree generated"); PrintTreeParallel(t.RootNode); Console.WriteLine("Tree printed paral"); Console.ReadLine(); } </code></pre> <p>Question:</p> <p><strong>What's wrong here?</strong> Why node is null in some case? And it happens only when there are a lot of generated nodes. For ex if there would be only 10 nodes everything is OK.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload