public async Task <ListNode> DeepCopy(ListNode head) { Debug.Assert(head.Previous == null, "Head node should be passed to this method."); var nodePacker = new ListNodePacker(); var cloningTasks = GetAllNodes(head) .Select(node => nodePacker.ToPackedListNode(node)) .Select(node => nodePacker.RestoreNodeAsync(node)); var clonedNodes = await Task.WhenAll(cloningTasks); return(clonedNodes[0]); }
public async Task <ListNode> Deserialize(Stream s) { var buffer = await ReadBufferFromStream(s); var nodePacker = new ListNodePacker(); var nodesTasks = ReadPackedNodesFromBuffer(nodePacker, buffer) .Select(node => nodePacker.RestoreNodeAsync(node)); var nodes = await Task.WhenAll(nodesTasks); return(nodes[0]); }