Explorar el Código

更新Unity热更新框架代码

tanghai hace 9 años
padre
commit
f278397075
Se han modificado 100 ficheros con 34542 adiciones y 6830 borrados
  1. BIN
      CSharp/CSharp.VC.db
  2. 9 0
      Unity/Assets/CSharp 6.0 Support.meta
  3. 9 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools.meta
  4. 9 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins.meta
  5. BIN
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.dll
  6. 24 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.dll.meta
  7. 1520 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.xml
  8. 8 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.xml.meta
  9. BIN
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.dll
  10. 24 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.dll.meta
  11. 19811 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.xml
  12. 8 0
      Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.xml.meta
  13. 9 0
      Unity/Assets/CSharp 6.0 Support/Editor.meta
  14. BIN
      Unity/Assets/CSharp 6.0 Support/Editor/CSharp60Support.dll
  15. 22 0
      Unity/Assets/CSharp 6.0 Support/Editor/CSharp60Support.dll.meta
  16. 9 0
      Unity/Assets/Editor.meta
  17. 9 0
      Unity/Assets/Editor/ReferenceCollectorEditor.meta
  18. 129 0
      Unity/Assets/Editor/ReferenceCollectorEditor/ReferenceCollectorEditor.cs
  19. 12 0
      Unity/Assets/Editor/ReferenceCollectorEditor/ReferenceCollectorEditor.cs.meta
  20. 4 0
      Unity/Assets/Plugins/CLRSharp.meta
  21. 9 0
      Unity/Assets/Plugins/CLRSharp/CLRSharp.meta
  22. 301 0
      Unity/Assets/Plugins/CLRSharp/CLRSharp/CLRSharp_Env.cs
  23. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/CLRSharp_Env.cs.meta
  24. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind.meta
  25. 136 106
      Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind/Yield.cs
  26. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind/Yield.cs.meta
  27. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute.meta
  28. 494 0
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/CodeBody.cs
  29. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/CodeBody.cs.meta
  30. 1256 1195
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/Context.cs
  31. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/Context.cs.meta
  32. 3219 2273
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/StackFrame.cs
  33. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/StackFrame.cs.meta
  34. 1636 1509
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/ValueOnStack.cs
  35. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/ValueOnStack.cs.meta
  36. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface.meta
  37. 50 50
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface/EnvAndLog.cs
  38. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface/EnvAndLog.cs.meta
  39. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type.meta
  40. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp.meta
  41. 39 39
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs
  42. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs.meta
  43. 630 439
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs
  44. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs.meta
  45. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate.meta
  46. 249 224
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate/Delegate_Helper.cs
  47. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate/Delegate_Helper.cs.meta
  48. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System.meta
  49. 522 336
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System/System_Type.cs
  50. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System/System_Type.cs.meta
  51. 149 145
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_Common.cs
  52. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_Common.cs.meta
  53. 202 171
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_List.cs
  54. 1 1
      Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_List.cs.meta
  55. 0 262
      Unity/Assets/Plugins/CLRSharp/CLRSharp_Env.cs
  56. 0 42
      Unity/Assets/Plugins/CLRSharp/Execute/CodeBody.cs
  57. 0 5
      Unity/Assets/Plugins/Libs.meta
  58. BIN
      Unity/Assets/Plugins/Libs/Mono.Cecil.Mdb.dll
  59. 0 7
      Unity/Assets/Plugins/Libs/Mono.Cecil.Mdb.dll.meta
  60. BIN
      Unity/Assets/Plugins/Libs/Mono.Cecil.dll
  61. 0 7
      Unity/Assets/Plugins/Libs/Mono.Cecil.dll.meta
  62. 9 0
      Unity/Assets/Plugins/Mono.Cecil.20.meta
  63. 9 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil.meta
  64. 9 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil.meta
  65. 252 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Code.cs
  66. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Code.cs.meta
  67. 394 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeReader.cs
  68. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeReader.cs.meta
  69. 38 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeWriter.cs
  70. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeWriter.cs.meta
  71. 112 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Document.cs
  72. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Document.cs.meta
  73. 89 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ExceptionHandler.cs
  74. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ExceptionHandler.cs.meta
  75. 278 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ILProcessor.cs
  76. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ILProcessor.cs.meta
  77. 321 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Instruction.cs
  78. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Instruction.cs.meta
  79. 267 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/MethodBody.cs
  80. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/MethodBody.cs.meta
  81. 455 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCode.cs
  82. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCode.cs.meta
  83. 912 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCodes.cs
  84. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCodes.cs.meta
  85. 70 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/SequencePoint.cs
  86. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/SequencePoint.cs.meta
  87. 243 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Symbols.cs
  88. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Symbols.cs.meta
  89. 52 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableDefinition.cs
  90. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableDefinition.cs.meta
  91. 75 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableReference.cs
  92. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableReference.cs.meta
  93. 9 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata.meta
  94. 61 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/BlobHeap.cs
  95. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/BlobHeap.cs.meta
  96. 36 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/Buffers.cs
  97. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/Buffers.cs.meta
  98. 46 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/CodedIndex.cs
  99. 12 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/CodedIndex.cs.meta
  100. 73 0
      Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/ElementType.cs

BIN
CSharp/CSharp.VC.db


+ 9 - 0
Unity/Assets/CSharp 6.0 Support.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f815cca01d9b82141bab30cea117fe27
+folderAsset: yes
+timeCreated: 1463827725
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6572fb060b35dd640a4d9b7dcb4d05ca
+folderAsset: yes
+timeCreated: 1433608940
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c6ed32ab61f5b734595610cb1f0771db
+folderAsset: yes
+timeCreated: 1431300257
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.dll


+ 24 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.dll.meta

@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: d9cf142eb8682f045ada13ed3f45efc6
+timeCreated: 1431210029
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  platformData:
+    Any:
+      enabled: 1
+      settings: {}
+    Editor:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+    WindowsStoreApps:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1520 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.xml

@@ -0,0 +1,1520 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>AsyncBridge.Net35</name>
+    </assembly>
+    <members>
+        <member name="T:AsyncCompatLibExtensions">
+            <summary>
+            Provides extension methods for threading-related types.
+            </summary>
+            
+            <summary>
+            Asynchronous wrappers for .NET Framework operations.
+            </summary>
+            
+            <summary>
+            Provides extension methods for threading-related types.
+            </summary>
+            
+            <remarks>
+            AsyncCtpThreadingExtensions is a placeholder.
+            </remarks>
+        </member>
+        <member name="M:AsyncCompatLibExtensions.GetAwaiter(System.Threading.Tasks.Task)">
+            <summary>
+            Gets an awaiter used to await this <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+            <param name="task">The task to await.</param>
+            <returns>
+            An awaiter instance.
+            </returns>
+        </member>
+        <member name="M:AsyncCompatLibExtensions.GetAwaiter``1(System.Threading.Tasks.Task{``0})">
+            <summary>
+            Gets an awaiter used to await this <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+            <typeparam name="TResult">Specifies the type of data returned by the task.</typeparam>
+            <param name="task">The task to await.</param>
+            <returns>
+            An awaiter instance.
+            </returns>
+        </member>
+        <member name="M:AsyncCompatLibExtensions.ConfigureAwait``1(System.Threading.Tasks.Task{``0},System.Boolean)">
+            <summary>
+            Creates and configures an awaitable object for awaiting the specified task.
+            </summary>
+            <param name="task">The task to be awaited.</param>
+            <param name="continueOnCapturedContext">true to automatic marshal back to the original call site's current SynchronizationContext
+                        or TaskScheduler; otherwise, false.</param>
+            <returns>
+            The instance to be awaited.
+            </returns>
+        </member>
+        <member name="M:AsyncCompatLibExtensions.ConfigureAwait(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Creates and configures an awaitable object for awaiting the specified task.
+            </summary>
+            <param name="task">The task to be awaited.</param>
+            <param name="continueOnCapturedContext">true to automatic marshal back to the original call site's current SynchronizationContext
+                        or TaskScheduler; otherwise, false.</param>
+            <returns>
+            The instance to be awaited.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncMethodBuilderCore">
+            <summary>
+            Holds state related to the builder's IAsyncStateMachine.
+            </summary>
+            
+            <remarks>
+            This is a mutable struct.  Be very delicate with it.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodBuilderCore.m_stateMachine">
+            <summary>
+            A reference to the heap-allocated state machine object associated with this builder.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start``1(``0@)">
+            <summary>
+            Initiates the builder's execution with the associated state machine.
+            </summary>
+            <typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="stateMachine">The state machine instance, passed by reference.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument is null (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+            <summary>
+            Associates the builder with the state machine it represents.
+            </summary>
+            <param name="stateMachine">The heap-allocated state machine object.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument was null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is incorrectly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.GetCompletionAction``2(``0@,``1@)">
+            <summary>
+            Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method.
+                        On first invocation, the supplied state machine will be boxed.
+            
+            </summary>
+            <typeparam name="TMethodBuilder">Specifies the type of the method builder used.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine used.</typeparam><param name="builder">The builder.</param><param name="stateMachine">The state machine.</param>
+            <returns>
+            An Action to provide to the awaiter.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.ThrowAsync(System.Exception,System.Threading.SynchronizationContext)">
+            <summary>
+            Throws the exception on the ThreadPool.
+            </summary>
+            <param name="exception">The exception to propagate.</param><param name="targetContext">The target context on which to propagate the exception.  Null to use the ThreadPool.</param>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner">
+            <summary>
+            Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.m_context">
+            <summary>
+            The context with which to run MoveNext.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.m_stateMachine">
+            <summary>
+            The state machine whose MoveNext method should be invoked.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.s_invokeMoveNext">
+            <summary>
+            Cached delegate used with ExecutionContext.Run.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.#ctor(System.Threading.ExecutionContext)">
+            <summary>
+            Initializes the runner.
+            </summary>
+            <param name="context">The context with which to run MoveNext.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run">
+            <summary>
+            Invokes MoveNext under the provided context.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(System.Object)">
+            <summary>
+            Invokes the MoveNext method on the supplied IAsyncStateMachine.
+            </summary>
+            <param name="stateMachine">The IAsyncStateMachine machine instance.</param>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncMethodTaskCache`1">
+            <summary>
+            Provides a base class used to cache tasks of a specific return type.
+            </summary>
+            <typeparam name="TResult">Specifies the type of results the cached tasks return.</typeparam>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.Singleton">
+            <summary>
+            A singleton cache for this result type.
+                        This may be null if there are no cached tasks for this TResult.
+            
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.CreateCompleted(`0)">
+            <summary>
+            Creates a non-disposable task.
+            </summary>
+            <param name="result">The result for the task.</param>
+            <returns>
+            The cacheable task.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.CreateCache">
+            <summary>
+            Creates a cache.
+            </summary>
+            
+            <returns>
+            A task cache for this result type.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.FromResult(`0)">
+            <summary>
+            Gets a cached task if one exists.
+            </summary>
+            <param name="result">The result for which we want a cached task.</param>
+            <returns>
+            A cached task if one exists; otherwise, null.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodBooleanTaskCache">
+            <summary>
+            Provides a cache for Boolean tasks.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodBooleanTaskCache.m_true">
+            <summary>
+            A true task.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodBooleanTaskCache.m_false">
+            <summary>
+            A false task.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodBooleanTaskCache.FromResult(System.Boolean)">
+            <summary>
+            Gets a cached task for the Boolean result.
+            </summary>
+            <param name="result">true or false</param>
+            <returns>
+            A cached task for the Boolean result.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache">
+            <summary>
+            Provides a cache for zero Int32 tasks.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache.INCLUSIVE_INT32_MIN">
+            <summary>
+            The minimum value, inclusive, for which we want a cached task.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache.EXCLUSIVE_INT32_MAX">
+            <summary>
+            The maximum value, exclusive, for which we want a cached task.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache.Int32Tasks">
+            <summary>
+            The cache of Task{Int32}.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache.CreateInt32Tasks">
+            <summary>
+            Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX).
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncMethodTaskCache`1.AsyncMethodInt32TaskCache.FromResult(System.Int32)">
+            <summary>
+            Gets a cached task for the zero Int32 result.
+            </summary>
+            <param name="result">The integer value</param>
+            <returns>
+            A cached task for the Int32 result or null if not cached.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncStateMachineAttribute">
+            <summary>
+            Identities the async state machine type for this method.
+            </summary>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.StateMachineAttribute">
+            <summary>
+            Identities the state machine type for this method.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.StateMachineAttribute.#ctor(System.Type)">
+            <summary>
+            Initializes the attribute.
+            </summary>
+            <param name="stateMachineType">The type that implements the state machine.</param>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.StateMachineAttribute.StateMachineType">
+            <summary>
+            Gets the type that implements the state machine.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncStateMachineAttribute.#ctor(System.Type)">
+            <summary>
+            Initializes the attribute.
+            </summary>
+            <param name="stateMachineType">The type that implements the state machine.</param>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder">
+            <summary>
+            Provides a builder for asynchronous methods that return <see cref="T:System.Threading.Tasks.Task"/>.
+                        This type is intended for compiler use only.
+            
+            </summary>
+            
+            <remarks>
+            AsyncTaskMethodBuilder is a value type, and thus it is copied by value.
+                        Prior to being copied, one of its Task, SetResult, or SetException members must be accessed,
+                        or else the copies may end up building distinct Task instances.
+            
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.IAsyncMethodBuilder">
+            <summary>
+            Represents an asynchronous method builder.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.s_cachedCompleted">
+            <summary>
+            A cached VoidTaskResult task used for builders that complete synchronously.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.m_builder">
+            <summary>
+            The generic builder object to which this non-generic instance delegates.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Create">
+            <summary>
+            Initializes a new <see cref="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder"/>.
+            </summary>
+            
+            <returns>
+            The initialized <see cref="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder"/>.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start``1(``0@)">
+            <summary>
+            Initiates the builder's execution with the associated state machine.
+            </summary>
+            <typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="stateMachine">The state machine instance, passed by reference.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+            <summary>
+            Associates the builder with the state machine it represents.
+            </summary>
+            <param name="stateMachine">The heap-allocated state machine object.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument was null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is incorrectly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetResult">
+            <summary>
+            Completes the <see cref="T:System.Threading.Tasks.Task"/> in the
+                        <see cref="T:System.Threading.Tasks.TaskStatus">RanToCompletion</see> state.
+            
+            </summary>
+            <exception cref="T:System.InvalidOperationException">The builder is not initialized.</exception><exception cref="T:System.InvalidOperationException">The task has already completed.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetException(System.Exception)">
+            <summary>
+            Completes the <see cref="T:System.Threading.Tasks.Task"/> in the
+                        <see cref="T:System.Threading.Tasks.TaskStatus">Faulted</see> state with the specified exception.
+            
+            </summary>
+            <param name="exception">The <see cref="T:System.Exception"/> to use to fault the task.</param><exception cref="T:System.ArgumentNullException">The <paramref name="exception"/> argument is null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is not initialized.</exception><exception cref="T:System.InvalidOperationException">The task has already completed.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetNotificationForWaitCompletion(System.Boolean)">
+            <summary>
+            Called by the debugger to request notification when the first wait operation
+                        (await, Wait, Result, etc.) on this builder's task completes.
+            
+            </summary>
+            <param name="enabled">true to enable notification; false to disable a previously set notification.
+                        </param>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Task">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.Task"/> for this builder.
+            </summary>
+            
+            <returns>
+            The <see cref="T:System.Threading.Tasks.Task"/> representing the builder's asynchronous operation.
+            </returns>
+            <exception cref="T:System.InvalidOperationException">The builder is not initialized.</exception>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.ObjectIdForDebugger">
+            <summary>
+            Gets an object that may be used to uniquely identify this builder to the debugger.
+            
+            </summary>
+            
+            <remarks>
+            This property lazily instantiates the ID in a non-thread-safe manner.
+                        It must only be used by the debugger, and only in a single-threaded manner
+                        when no other threads are in the middle of accessing this property or this.Task.
+            
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1">
+            <summary>
+            Provides a builder for asynchronous methods that return <see cref="T:System.Threading.Tasks.Task`1"/>.
+                        This type is intended for compiler use only.
+            
+            </summary>
+            
+            <remarks>
+            AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value.
+                        Prior to being copied, one of its Task, SetResult, or SetException members must be accessed,
+                        or else the copies may end up building distinct Task instances.
+            
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.s_defaultResultTask">
+            <summary>
+            A cached task for default(TResult).
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_coreState">
+            <summary>
+            State related to the IAsyncStateMachine.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task">
+            <summary>
+            The lazily-initialized task completion source.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.#cctor">
+            <summary>
+            Temporary support for disabling crashing if tasks go unobserved.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Create">
+            <summary>
+            Initializes a new <see cref="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder"/>.
+            </summary>
+            
+            <returns>
+            The initialized <see cref="T:System.Runtime.CompilerServices.AsyncTaskMethodBuilder"/>.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start``1(``0@)">
+            <summary>
+            Initiates the builder's execution with the associated state machine.
+            </summary>
+            <typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="stateMachine">The state machine instance, passed by reference.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+            <summary>
+            Associates the builder with the state machine it represents.
+            </summary>
+            <param name="stateMachine">The heap-allocated state machine object.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument was null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is incorrectly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AwaitOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AwaitUnsafeOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetResult(`0)">
+            <summary>
+            Completes the <see cref="T:System.Threading.Tasks.Task`1"/> in the
+                        <see cref="T:System.Threading.Tasks.TaskStatus">RanToCompletion</see> state with the specified result.
+            
+            </summary>
+            <param name="result">The result to use to complete the task.</param><exception cref="T:System.InvalidOperationException">The task has already completed.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetResult(System.Threading.Tasks.TaskCompletionSource{`0})">
+            <summary>
+            Completes the builder by using either the supplied completed task, or by completing
+                        the builder's previously accessed task using default(TResult).
+            
+            </summary>
+            <param name="completedTask">A task already completed with the value default(TResult).</param><exception cref="T:System.InvalidOperationException">The task has already completed.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetException(System.Exception)">
+            <summary>
+            Completes the <see cref="T:System.Threading.Tasks.Task`1"/> in the
+                        <see cref="T:System.Threading.Tasks.TaskStatus">Faulted</see> state with the specified exception.
+            
+            </summary>
+            <param name="exception">The <see cref="T:System.Exception"/> to use to fault the task.</param><exception cref="T:System.ArgumentNullException">The <paramref name="exception"/> argument is null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The task has already completed.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetNotificationForWaitCompletion(System.Boolean)">
+            <summary>
+            Called by the debugger to request notification when the first wait operation
+                        (await, Wait, Result, etc.) on this builder's task completes.
+            
+            </summary>
+            <param name="enabled">true to enable notification; false to disable a previously set notification.
+                        </param>
+            <remarks>
+            This should only be invoked from within an asynchronous method,
+                        and only by the debugger.
+            
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.GetTaskForResult(`0)">
+            <summary>
+            Gets a task for the specified result.  This will either
+                        be a cached or new task, never null.
+            
+            </summary>
+            <param name="result">The result for which we need a task.</param>
+            <returns>
+            The completed task containing the result.
+            </returns>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.CompletionSource">
+            <summary>
+            Gets the lazily-initialized TaskCompletionSource.
+            </summary>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Task">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.Task`1"/> for this builder.
+            </summary>
+            
+            <returns>
+            The <see cref="T:System.Threading.Tasks.Task`1"/> representing the builder's asynchronous operation.
+            </returns>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.ObjectIdForDebugger">
+            <summary>
+            Gets an object that may be used to uniquely identify this builder to the debugger.
+            
+            </summary>
+            
+            <remarks>
+            This property lazily instantiates the ID in a non-thread-safe manner.
+                        It must only be used by the debugger, and only in a single-threaded manner
+                        when no other threads are in the middle of accessing this property or this.Task.
+            
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.AsyncVoidMethodBuilder">
+            <summary>
+            Provides a builder for asynchronous methods that return void.
+                        This type is intended for compiler use only.
+            
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.m_synchronizationContext">
+            <summary>
+            The synchronization context associated with this operation.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.m_coreState">
+            <summary>
+            State related to the IAsyncStateMachine.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.m_objectIdForDebugger">
+            <summary>
+            An object used by the debugger to uniquely identify this builder.  Lazily initialized.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.s_preventUnobservedTaskExceptionsInvoked">
+            <summary>
+            Non-zero if PreventUnobservedTaskExceptions has already been invoked.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.#cctor">
+            <summary>
+            Temporary support for disabling crashing if tasks go unobserved.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.#ctor(System.Threading.SynchronizationContext)">
+            <summary>
+            Initializes the <see cref="T:System.Runtime.CompilerServices.AsyncVoidMethodBuilder"/>.
+            </summary>
+            <param name="synchronizationContext">The synchronizationContext associated with this operation. This may be null.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.PreventUnobservedTaskExceptions">
+            <summary>
+            Registers with UnobservedTaskException to suppress exception crashing.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Create">
+            <summary>
+            Initializes a new <see cref="T:System.Runtime.CompilerServices.AsyncVoidMethodBuilder"/>.
+            </summary>
+            
+            <returns>
+            The initialized <see cref="T:System.Runtime.CompilerServices.AsyncVoidMethodBuilder"/>.
+            </returns>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start``1(``0@)">
+            <summary>
+            Initiates the builder's execution with the associated state machine.
+            </summary>
+            <typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="stateMachine">The state machine instance, passed by reference.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument was null (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+            <summary>
+            Associates the builder with the state machine it represents.
+            </summary>
+            <param name="stateMachine">The heap-allocated state machine object.</param><exception cref="T:System.ArgumentNullException">The <paramref name="stateMachine"/> argument was null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is incorrectly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted``2(``0@,``1@)">
+            <summary>
+            Schedules the specified state machine to be pushed forward when the specified awaiter completes.
+            
+            </summary>
+            <typeparam name="TAwaiter">Specifies the type of the awaiter.</typeparam><typeparam name="TStateMachine">Specifies the type of the state machine.</typeparam><param name="awaiter">The awaiter.</param><param name="stateMachine">The state machine.</param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.SetResult">
+            <summary>
+            Completes the method builder successfully.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.SetException(System.Exception)">
+            <summary>
+            Faults the method builder with an exception.
+            </summary>
+            <param name="exception">The exception that is the cause of this fault.</param><exception cref="T:System.ArgumentNullException">The <paramref name="exception"/> argument is null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The builder is not initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.NotifySynchronizationContextOfCompletion">
+            <summary>
+            Notifies the current synchronization context that the operation completed.
+            </summary>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.AsyncVoidMethodBuilder.ObjectIdForDebugger">
+            <summary>
+            Gets an object that may be used to uniquely identify this builder to the debugger.
+            
+            </summary>
+            
+            <remarks>
+            This property lazily instantiates the ID in a non-thread-safe manner.
+                        It must only be used by the debugger and only in a single-threaded manner.
+            
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.CallerFilePathAttribute">
+            <summary>
+            Allows you to obtain the full path of the source file that contains the caller. This is the file path at the time of compile.
+            </summary>
+            <remarks>
+            You apply the <b>CallerFilePath</b> attribute to an optional parameter that has a default value. 
+            You must specify an explicit default value for the optional parameter.
+            You can't apply this attribute to parameters that aren't specified as optional.
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.CallerLineNumberAttribute">
+            <summary>
+            Allows you to obtain the line number in the source file at which the method is called.
+            </summary>
+            <remarks>
+            You apply the <b>CallerFilePath</b> attribute to an optional parameter that has a default value. 
+            You must specify an explicit default value for the optional parameter.
+            You can't apply this attribute to parameters that aren't specified as optional.
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.CallerMemberNameAttribute">
+            <summary>
+              Allows you to obtain the method or property name of the caller to the method.
+            </summary>
+            <remarks>
+              You apply the <b>CallerMemberName</b> attribute to an optional parameter that has a default value. 
+              You must specify an explicit default value for the optional parameter. 
+              You can't apply this attribute to parameters that aren't specified as optional.
+            <para/>
+              You can use the <b>CallerMemberName</b> attribute to avoid specifying the member name as a <b>String</b> argument to the called method. 
+              By using this technique, you avoid the problem that <b>Rename Refactoring</b> doesn't change the <b>String</b> values. 
+              This is especially useful for the following tasks:
+              <list type="bullet">
+                <item>
+                  Using tracing and diagnostic routines.
+                </item>
+                <item>
+                  Implementing the <see cref="T:System.ComponentModel.INotifyPropertyChanged"/> interface when binding data. 
+                  This interface allows the property of an object to notify a bound control that the property has changed, 
+                  so that the control can display the updated information. 
+                  Without the CallerMemberName attribute, you must specify the property name as a literal.
+                </item>
+              </list>
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1">
+            <summary>
+            Provides an awaitable object that allows for configured awaits on <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </summary>
+            
+            <remarks>
+            This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.m_configuredTaskAwaiter">
+            <summary>
+            The underlying awaitable on whose logic this awaitable relies.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.#ctor(System.Threading.Tasks.Task{`0},System.Boolean)">
+            <summary>
+            Initializes the <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1"/>.
+            </summary>
+            <param name="task">The awaitable <see cref="T:System.Threading.Tasks.Task`1"/>.</param><param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the original context captured; otherwise, false.
+                        </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.GetAwaiter">
+            <summary>
+            Gets an awaiter for this awaitable.
+            </summary>
+            
+            <returns>
+            The awaiter.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter">
+            <summary>
+            Provides an awaiter for a <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1"/>.
+            </summary>
+            
+            <remarks>
+            This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.ICriticalNotifyCompletion">
+            <summary>
+            Represents an awaiter used to schedule continuations when an await operation completes.
+            
+            </summary>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.INotifyCompletion">
+            <summary>
+            Represents an operation that will schedule continuations when the operation completes.
+            
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.INotifyCompletion.OnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation action to be invoked when the instance completes.
+            </summary>
+            <param name="continuation">The action to invoke when the operation completes.</param><exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ICriticalNotifyCompletion.UnsafeOnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation action to be invoked when the instance completes.
+            </summary>
+            <param name="continuation">The action to invoke when the operation completes.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception>
+            <remarks>
+            Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.m_task">
+            <summary>
+            The task being awaited.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.m_continueOnCapturedContext">
+            <summary>
+            Whether to attempt marshaling back to the original context.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.#ctor(System.Threading.Tasks.Task{`0},System.Boolean)">
+            <summary>
+            Initializes the <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter"/>.
+            </summary>
+            <param name="task">The awaitable <see cref="T:System.Threading.Tasks.Task`1"/>.</param><param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the original context captured; otherwise, false.
+                        </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.OnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/>.
+            </summary>
+            <param name="continuation">The action to invoke when the await operation completes.</param><exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception><exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <remarks>
+            This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.UnsafeOnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/>.
+            </summary>
+            <param name="continuation">The action to invoke when the await operation completes.</param><exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception><exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+            <remarks>
+            This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult">
+            <summary>
+            Ends the await on the completed <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </summary>
+            
+            <returns>
+            The result of the completed <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </returns>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception><exception cref="T:System.InvalidOperationException">The task was not yet completed.</exception><exception cref="T:System.Threading.Tasks.TaskCanceledException">The task was canceled.</exception><exception cref="T:System.Exception">The task completed in a Faulted state.</exception>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.IsCompleted">
+            <summary>
+            Gets whether the task being awaited is completed.
+            </summary>
+            
+            <remarks>
+            This property is intended for compiler user rather than use directly in code.
+            </remarks>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable">
+            <summary>
+            Provides an awaitable object that allows for configured awaits on <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+            
+            <remarks>
+            This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.m_configuredTaskAwaiter">
+            <summary>
+            The task being awaited.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.#ctor(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Initializes the <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable"/>.
+            </summary>
+            <param name="task">The awaitable <see cref="T:System.Threading.Tasks.Task"/>.</param><param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the original context captured; otherwise, false.
+                        </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.GetAwaiter">
+            <summary>
+            Gets an awaiter for this awaitable.
+            </summary>
+            
+            <returns>
+            The awaiter.
+            </returns>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter">
+            <summary>
+            Provides an awaiter for a <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable"/>.
+            </summary>
+            
+            <remarks>
+            This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.m_task">
+            <summary>
+            The task being awaited.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.m_continueOnCapturedContext">
+            <summary>
+            Whether to attempt marshaling back to the original context.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.#ctor(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Initializes the <see cref="T:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter"/>.
+            </summary>
+            <param name="task">The <see cref="T:System.Threading.Tasks.Task"/> to await.</param><param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the original context captured
+                        when BeginAwait is called; otherwise, false.
+                        </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.OnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/>.
+            </summary>
+            <param name="continuation">The action to invoke when the await operation completes.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <remarks>
+            This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.UnsafeOnCompleted(System.Action)">
+            <summary>
+            Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/>.
+            </summary>
+            <param name="continuation">The action to invoke when the await operation completes.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="continuation"/> argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+            <remarks>
+            This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult">
+            <summary>
+            Ends the await on the completed <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+            
+            <returns>
+            The result of the completed <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </returns>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception><exception cref="T:System.InvalidOperationException">The task was not yet completed.</exception><exception cref="T:System.Threading.Tasks.TaskCanceledException">The task was canceled.</exception><exception cref="T:System.Exception">The task completed in a Faulted state.</exception>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.IsCompleted">
+            <summary>
+            Gets whether the task being awaited is completed.
+            </summary>
+            
+            <remarks>
+            This property is intended for compiler user rather than use directly in code.
+            </remarks>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.IAsyncStateMachine">
+            <summary>
+              Represents state machines generated for asynchronous methods. This type is intended for compiler use only.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext">
+            <summary>
+              Moves the state machine to its next state.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.IAsyncStateMachine.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+            <summary>
+              Configures the state machine with a heap-allocated replica.
+            </summary>
+            <param name="stateMachine"> The heap-allocated replica. </param>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.IteratorStateMachineAttribute">
+            <summary>
+            Identities the iterator state machine type for this method.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.IteratorStateMachineAttribute.#ctor(System.Type)">
+            <summary>
+            Initializes the attribute.
+            </summary>
+            <param name="stateMachineType">The type that implements the state machine.</param>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.TaskAwaiter">
+            <summary>
+              Provides an awaiter for awaiting a <see cref="T:System.Threading.Tasks.Task"/> .
+            </summary>
+            <remarks>
+              This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter.CONTINUE_ON_CAPTURED_CONTEXT_DEFAULT">
+            <summary>
+              The default value to use for continueOnCapturedContext.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter.InvalidOperationException_TaskNotCompleted">
+            <summary>
+              Error message for GetAwaiter.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter.s_prepForRemoting">
+            <summary>
+              A MethodInfo for the Exception.PrepForRemoting method.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter.s_emptyParams">
+            <summary>
+              An empty array to use with MethodInfo.Invoke.
+            </summary>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter.m_task">
+            <summary>
+              The task being awaited.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.#ctor(System.Threading.Tasks.Task)">
+            <summary>
+              Initializes the <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="task"> The <see cref="T:System.Threading.Tasks.Task"/> to be awaited. </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.OnCompleted(System.Action)">
+            <summary>
+              Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="continuation"> The action to invoke when the await operation completes. </param>
+            <exception cref="T:System.ArgumentNullException">The
+              <paramref name="continuation"/>
+              argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.UnsafeOnCompleted(System.Action)">
+            <summary>
+              Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="continuation"> The action to invoke when the await operation completes. </param>
+            <exception cref="T:System.ArgumentNullException">The
+              <paramref name="continuation"/>
+              argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.GetResult">
+            <summary>
+              Ends the await on the completed <see cref="T:System.Threading.Tasks.Task"/> .
+            </summary>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <exception cref="T:System.InvalidOperationException">The task was not yet completed.</exception>
+            <exception cref="T:System.Threading.Tasks.TaskCanceledException">The task was canceled.</exception>
+            <exception cref="T:System.Exception">The task completed in a Faulted state.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Task)">
+            <summary>
+              Fast checks for the end of an await operation to determine whether more needs to be done prior to completing the await.
+            </summary>
+            <param name="task"> The awaited task. </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(System.Threading.Tasks.Task)">
+            <summary>
+              Handles validations on tasks that aren't successfully completed.
+            </summary>
+            <param name="task"> The awaited task. </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)">
+            <summary>
+              Throws an exception to handle a task that completed in a state other than RanToCompletion.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.OnCompletedInternal(System.Threading.Tasks.Task,System.Action,System.Boolean)">
+            <summary>
+              Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="task"> The awaited task. </param>
+            <param name="continuation"> The action to invoke when the await operation completes. </param>
+            <param name="continueOnCapturedContext"> Whether to capture and marshal back to the current context. </param>
+            <exception cref="T:System.ArgumentNullException">The
+              <paramref name="continuation"/>
+              argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.RunNoException(System.Action)">
+            <summary>
+              Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool.
+            </summary>
+            <param name="continuation" />
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.PrepareExceptionForRethrow(System.Exception)">
+            <summary>
+              Copies the exception's stack trace so its stack trace isn't overwritten.
+            </summary>
+            <param name="exc"> The exception to prepare. </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter.GetPrepForRemotingMethodInfo">
+            <summary>
+              Gets the MethodInfo for the internal PrepForRemoting method on Exception.
+            </summary>
+            <returns> The MethodInfo if it could be retrieved, or else null. </returns>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.TaskAwaiter.IsCompleted">
+            <summary>
+              Gets whether the task being awaited is completed.
+            </summary>
+            <remarks>
+              This property is intended for compiler user rather than use directly in code.
+            </remarks>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.TaskAwaiter.IsValidLocationForInlining">
+            <summary>
+              Whether the current thread is appropriate for inlining the await continuation.
+            </summary>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.TaskAwaiter`1">
+            <summary>
+              Provides an awaiter for awaiting a <see cref="T:System.Threading.Tasks.Task`1"/> .
+            </summary>
+            <remarks>
+              This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.TaskAwaiter`1.m_task">
+            <summary>
+              The task being awaited.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter`1.#ctor(System.Threading.Tasks.Task{`0})">
+            <summary>
+              Initializes the <see cref="T:System.Runtime.CompilerServices.TaskAwaiter`1"/> .
+            </summary>
+            <param name="task"> The <see cref="T:System.Threading.Tasks.Task`1"/> to be awaited. </param>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter`1.OnCompleted(System.Action)">
+            <summary>
+              Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="continuation"> The action to invoke when the await operation completes. </param>
+            <exception cref="T:System.ArgumentNullException">The
+              <paramref name="continuation"/>
+              argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter`1.UnsafeOnCompleted(System.Action)">
+            <summary>
+              Schedules the continuation onto the <see cref="T:System.Threading.Tasks.Task"/> associated with this <see cref="T:System.Runtime.CompilerServices.TaskAwaiter"/> .
+            </summary>
+            <param name="continuation"> The action to invoke when the await operation completes. </param>
+            <exception cref="T:System.ArgumentNullException">The
+              <paramref name="continuation"/>
+              argument is null (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.TaskAwaiter`1.GetResult">
+            <summary>
+              Ends the await on the completed <see cref="T:System.Threading.Tasks.Task`1"/> .
+            </summary>
+            <returns> The result of the completed <see cref="T:System.Threading.Tasks.Task`1"/> . </returns>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+            <exception cref="T:System.InvalidOperationException">The task was not yet completed.</exception>
+            <exception cref="T:System.Threading.Tasks.TaskCanceledException">The task was canceled.</exception>
+            <exception cref="T:System.Exception">The task completed in a Faulted state.</exception>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.TaskAwaiter`1.IsCompleted">
+            <summary>
+              Gets whether the task being awaited is completed.
+            </summary>
+            <remarks>
+              This property is intended for compiler user rather than use directly in code.
+            </remarks>
+            <exception cref="T:System.NullReferenceException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.VoidTaskResult">
+            <summary>
+            Used with Task(of void)
+            </summary>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.YieldAwaitable">
+            <summary>
+              Provides an awaitable context for switching into a target environment.
+            </summary>
+            <remarks>
+              This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.YieldAwaitable.GetAwaiter">
+            <summary>
+              Gets an awaiter for this <see cref="T:System.Runtime.CompilerServices.YieldAwaitable"/> .
+            </summary>
+            <returns> An awaiter for this awaitable. </returns>
+            <remarks>
+              This method is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="T:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter">
+            <summary>
+              Provides an awaiter that switches into a target environment.
+            </summary>
+            <remarks>
+              This type is intended for compiler use only.
+            </remarks>
+        </member>
+        <member name="F:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.s_completed">
+            <summary>
+              A completed task.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.OnCompleted(System.Action)">
+            <summary>
+              Posts the <paramref name="continuation"/> back to the current context.
+            </summary>
+            <param name="continuation"> The action to invoke asynchronously. </param>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.UnsafeOnCompleted(System.Action)">
+            <summary>
+              Posts the <paramref name="continuation"/> back to the current context.
+            </summary>
+            <param name="continuation"> The action to invoke asynchronously. </param>
+            <exception cref="T:System.InvalidOperationException">The awaiter was not properly initialized.</exception>
+        </member>
+        <member name="M:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult">
+            <summary>
+              Ends the await operation.
+            </summary>
+        </member>
+        <member name="P:System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.IsCompleted">
+            <summary>
+              Gets whether a yield is not required.
+            </summary>
+            <remarks>
+              This property is intended for compiler user rather than use directly in code.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskEx">
+            <summary>
+            Provides methods for creating and manipulating tasks.
+            </summary>
+            
+            <remarks>
+            TaskEx is a placeholder.
+            </remarks>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskEx.s_preCompletedTask">
+            <summary>
+            An already completed task.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskEx.s_preCanceledTask">
+            <summary>
+            An already canceled task.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run(System.Action)">
+            <summary>
+            Creates a task that runs the specified action.
+            </summary>
+            <param name="action">The action to execute asynchronously.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="action"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run(System.Action,System.Threading.CancellationToken)">
+            <summary>
+            Creates a task that runs the specified action.
+            </summary>
+            <param name="action">The action to execute.</param><param name="cancellationToken">The CancellationToken to use to request cancellation of this task.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="action"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run``1(System.Func{``0})">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The function to execute asynchronously.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run``1(System.Func{``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The action to execute.</param><param name="cancellationToken">The CancellationToken to use to cancel the task.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run(System.Func{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The action to execute asynchronously.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run(System.Func{System.Threading.Tasks.Task},System.Threading.CancellationToken)">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The function to execute.</param><param name="cancellationToken">The CancellationToken to use to request cancellation of this task.</param>
+            <returns>
+            A task that represents the completion of the function.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run``1(System.Func{System.Threading.Tasks.Task{``0}})">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The function to execute asynchronously.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Run``1(System.Func{System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken)">
+            <summary>
+            Creates a task that runs the specified function.
+            </summary>
+            <param name="function">The action to execute.</param><param name="cancellationToken">The CancellationToken to use to cancel the task.</param>
+            <returns>
+            A task that represents the completion of the action.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="function"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Delay(System.Int32)">
+            <summary>
+            Starts a Task that will complete after the specified due time.
+            </summary>
+            <param name="dueTime">The delay in milliseconds before the returned task completes.</param>
+            <returns>
+            The timed Task.
+            </returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="dueTime"/> argument must be non-negative or -1 and less than or equal to Int32.MaxValue.
+                        </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Delay(System.TimeSpan)">
+            <summary>
+            Starts a Task that will complete after the specified due time.
+            </summary>
+            <param name="dueTime">The delay before the returned task completes.</param>
+            <returns>
+            The timed Task.
+            </returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="dueTime"/> argument must be non-negative or -1 and less than or equal to Int32.MaxValue.
+                        </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Delay(System.TimeSpan,System.Threading.CancellationToken)">
+            <summary>
+            Starts a Task that will complete after the specified due time.
+            </summary>
+            <param name="dueTime">The delay before the returned task completes.</param><param name="cancellationToken">A CancellationToken that may be used to cancel the task before the due time occurs.</param>
+            <returns>
+            The timed Task.
+            </returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="dueTime"/> argument must be non-negative or -1 and less than or equal to Int32.MaxValue.
+                        </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Delay(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Starts a Task that will complete after the specified due time.
+            </summary>
+            <param name="dueTime">The delay in milliseconds before the returned task completes.</param><param name="cancellationToken">A CancellationToken that may be used to cancel the task before the due time occurs.</param>
+            <returns>
+            The timed Task.
+            </returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="dueTime"/> argument must be non-negative or -1 and less than or equal to Int32.MaxValue.
+                        </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAll(System.Threading.Tasks.Task[])">
+            <summary>
+            Creates a Task that will complete only when all of the provided collection of Tasks has completed.
+            </summary>
+            <param name="tasks">The Tasks to monitor for completion.</param>
+            <returns>
+            A Task that represents the completion of all of the provided tasks.
+            </returns>
+            
+            <remarks>
+            If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information
+                        about all of the faulted tasks.  If no Tasks fault but one or more Tasks is canceled, the returned
+                        Task will also be canceled.
+            
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAll``1(System.Threading.Tasks.Task{``0}[])">
+            <summary>
+            Creates a Task that will complete only when all of the provided collection of Tasks has completed.
+            </summary>
+            <param name="tasks">The Tasks to monitor for completion.</param>
+            <returns>
+            A Task that represents the completion of all of the provided tasks.
+            </returns>
+            
+            <remarks>
+            If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information
+                        about all of the faulted tasks.  If no Tasks fault but one or more Tasks is canceled, the returned
+                        Task will also be canceled.
+            
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAll(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a Task that will complete only when all of the provided collection of Tasks has completed.
+            </summary>
+            <param name="tasks">The Tasks to monitor for completion.</param>
+            <returns>
+            A Task that represents the completion of all of the provided tasks.
+            </returns>
+            
+            <remarks>
+            If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information
+                        about all of the faulted tasks.  If no Tasks fault but one or more Tasks is canceled, the returned
+                        Task will also be canceled.
+            
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAll``1(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task{``0}})">
+            <summary>
+            Creates a Task that will complete only when all of the provided collection of Tasks has completed.
+            </summary>
+            <param name="tasks">The Tasks to monitor for completion.</param>
+            <returns>
+            A Task that represents the completion of all of the provided tasks.
+            </returns>
+            
+            <remarks>
+            If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information
+                        about all of the faulted tasks.  If no Tasks fault but one or more Tasks is canceled, the returned
+                        Task will also be canceled.
+            
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAllCore``1(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task},System.Action{System.Threading.Tasks.Task[],System.Threading.Tasks.TaskCompletionSource{``0}})">
+            <summary>
+            Creates a Task that will complete only when all of the provided collection of Tasks has completed.
+            </summary>
+            <param name="tasks">The Tasks to monitor for completion.</param><param name="setResultAction">A callback invoked when all of the tasks complete successfully in the RanToCompletion state.
+                        This callback is responsible for storing the results into the TaskCompletionSource.
+                        </param>
+            <returns>
+            A Task that represents the completion of all of the provided tasks.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAny(System.Threading.Tasks.Task[])">
+            <summary>
+            Creates a Task that will complete when any of the tasks in the provided collection completes.
+            </summary>
+            <param name="tasks">The Tasks to be monitored.</param>
+            <returns>
+            A Task that represents the completion of any of the provided Tasks.  The completed Task is this Task's result.
+            
+            </returns>
+            
+            <remarks>
+            Any Tasks that fault will need to have their exceptions observed elsewhere.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAny(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a Task that will complete when any of the tasks in the provided collection completes.
+            </summary>
+            <param name="tasks">The Tasks to be monitored.</param>
+            <returns>
+            A Task that represents the completion of any of the provided Tasks.  The completed Task is this Task's result.
+            
+            </returns>
+            
+            <remarks>
+            Any Tasks that fault will need to have their exceptions observed elsewhere.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAny``1(System.Threading.Tasks.Task{``0}[])">
+            <summary>
+            Creates a Task that will complete when any of the tasks in the provided collection completes.
+            </summary>
+            <param name="tasks">The Tasks to be monitored.</param>
+            <returns>
+            A Task that represents the completion of any of the provided Tasks.  The completed Task is this Task's result.
+            
+            </returns>
+            
+            <remarks>
+            Any Tasks that fault will need to have their exceptions observed elsewhere.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.WhenAny``1(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task{``0}})">
+            <summary>
+            Creates a Task that will complete when any of the tasks in the provided collection completes.
+            </summary>
+            <param name="tasks">The Tasks to be monitored.</param>
+            <returns>
+            A Task that represents the completion of any of the provided Tasks.  The completed Task is this Task's result.
+            
+            </returns>
+            
+            <remarks>
+            Any Tasks that fault will need to have their exceptions observed elsewhere.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="tasks"/> argument is null.</exception><exception cref="T:System.ArgumentException">The <paramref name="tasks"/> argument contains a null reference.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.FromResult``1(``0)">
+            <summary>
+            Creates an already completed <see cref="T:System.Threading.Tasks.Task`1"/> from the specified result.
+            </summary>
+            <param name="result">The result from which to create the completed task.</param>
+            <returns>
+            The completed task.
+            </returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.Yield">
+            <summary>
+            Creates an awaitable that asynchronously yields back to the current context when awaited.
+            </summary>
+            
+            <returns>
+            A context that, when awaited, will asynchronously transition back into the current context.
+                        If SynchronizationContext.Current is non-null, that is treated as the current context.
+                        Otherwise, TaskScheduler.Current is treated as the current context.
+            
+            </returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskEx.AddPotentiallyUnwrappedExceptions(System.Collections.Generic.List{System.Exception}@,System.Exception)">
+            <summary>
+            Adds the target exception to the list, initializing the list if it's null.
+            </summary>
+            <param name="targetList">The list to which to add the exception and initialize if the list is null.</param><param name="exception">The exception to add, and unwrap if it's an aggregate.</param>
+        </member>
+        <member name="T:System.Runtime.TargetedPatchingOptOutAttribute">
+            <summary>
+            Indicates that the .NET Framework class library method to which this attribute is applied is unlikely to be affected by servicing releases, 
+            and therefore is eligible to be inlined across Native Image Generator (NGen) images.
+            </summary>
+        </member>
+        <member name="M:System.Runtime.TargetedPatchingOptOutAttribute.#ctor(System.String)">
+            <summary>
+            Infrastructure. Initializes a new instance of the <b>TargetedPatchingOptOutAttribute</b> class.
+            </summary>
+            <param name="reason">The reason why the method to which the <see cref="T:System.Runtime.TargetedPatchingOptOutAttribute"/> attribute is applied is 
+            considered to be eligible for inlining across Native Image Generator (NGen) images.</param>
+        </member>
+        <member name="P:System.Runtime.TargetedPatchingOptOutAttribute.Reason">
+            <summary>
+            Infrastructure. Gets the reason why the method to which this attribute is applied is considered to be eligible for inlining across 
+            Native Image Generator (NGen) images.
+            </summary>
+        </member>
+    </members>
+</doc>

+ 8 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/AsyncBridge.Net35.xml.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7df038e9fb8ffa940ba490cc3094b284
+timeCreated: 1431533927
+licenseType: Pro
+TextScriptImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.dll


+ 24 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.dll.meta

@@ -0,0 +1,24 @@
+fileFormatVersion: 2
+guid: df22b0b85c54d7648af866dc9beb2712
+timeCreated: 1431210029
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  platformData:
+    Any:
+      enabled: 1
+      settings: {}
+    Editor:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+    WindowsStoreApps:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 19811 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.xml

@@ -0,0 +1,19811 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>System.Threading</name>
+    </assembly>
+    <members>
+        <member name="T:System.Diagnostics.Contracts.Contract">
+            <summary>
+            A stub version of .NET 4.0 contracts.
+            </summary>
+        </member>
+        <member name="T:System.Environment2">
+            <summary>
+            A dummy class that implements GetResourceString. Environment.GetResourceString(string) is an internal
+            method in mscorlib.dll.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.IThreadPoolWorkItem">
+            <summary>
+            An interface similar to the one added in .NET 4.0.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Monitor2">
+            <summary>
+            .NET 4.0 Monitor class supports new overloads that return a boolean value
+            representing whether the lock was successfully taken or not. The return value
+            is meant to be accurate even in the presence of thread aborts.
+            
+            Monitor2 implements these methods as simple wrappers over the .NET 3.5 methods,
+            but without making the guarantees related to thread aborts.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Generic.Mscorlib_DictionaryDebugView`2">
+            <summary>
+            This internal class from mscorlib.dll is used by ConcurrentDictionary.
+            </summary>
+        </member>
+        <member name="T:System.OperationCanceledException2">
+            <summary>
+            OperationCanceledException is changing from .NET 3.5 to .NET 4.0. To make Parallel Extensions work,
+            we include the new version as OperationCanceledException2.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Platform">
+            <summary>
+            A convenience class for common platform-related logic.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Platform.ProcessorCount">
+            <summary>
+            Gets the number of available processors available to this process on the current machine.
+            </summary>
+        </member>
+        <member name="T:System.SecuritySafeCriticalAttribute">
+            <summary>
+            A dummy replacement for the .NET 4.0 SecuritySafeCriticalAttribute. The dummy attribute makes the
+            code compile, but we are likely losing the ability to be called from a partial trust environment.
+            </summary>
+        </member>
+        <member name="T:System.Threading.StackCrawlMark2">
+            <summary>
+            A dummy replacement for the .NET internal class StackCrawlMark.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentDictionary`2">
+            <summary>
+            Represents a thread-safe collection of keys and values.
+            </summary>
+            <typeparam name="TKey">The type of the keys in the dictionary.</typeparam>
+            <typeparam name="TValue">The type of the values in the dictionary.</typeparam>
+            <remarks>
+            All public and protected members of <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> are thread-safe and may be used
+            concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that is empty, has the default concurrency level, has the default initial capacity, and
+            uses the default comparer for the key type.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that is empty, has the specified concurrency level and capacity, and uses the default
+            comparer for the key type.
+            </summary>
+            <param name="concurrencyLevel">The estimated number of threads that will update the
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> concurrently.</param>
+            <param name="capacity">The initial number of elements that the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            can contain.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="concurrencyLevel"/> is
+            less than 1.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"> <paramref name="capacity"/> is less than
+            0.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that contains elements copied from the specified <see cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/>, has the default concurrency
+            level, has the default initial capacity, and uses the default comparer for the key type.
+            </summary>
+            <param name="collection">The <see cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to
+            the new
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="collection"/> contains one or more
+            duplicate keys.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that is empty, has the specified concurrency level and capacity, and uses the specified
+            <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
+            </summary>
+            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
+            implementation to use when comparing keys.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IEqualityComparer{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that contains elements copied from the specified <see cref="T:System.Collections.IEnumerable"/>, has the default concurrency level, has the default
+            initial capacity, and uses the specified
+            <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
+            </summary>
+            <param name="collection">The <see cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to
+            the new
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</param>
+            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
+            implementation to use when comparing keys.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is a null reference
+            (Nothing in Visual Basic). -or-
+            <paramref name="comparer"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Int32,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IEqualityComparer{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> 
+            class that contains elements copied from the specified <see cref="T:System.Collections.IEnumerable"/>, 
+            has the specified concurrency level, has the specified initial capacity, and uses the specified 
+            <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
+            </summary>
+            <param name="concurrencyLevel">The estimated number of threads that will update the 
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> concurrently.</param>
+            <param name="collection">The <see cref="T:System.Collections.IEnumerable{KeyValuePair{TKey,TValue}}"/> whose elements are copied to the new 
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</param>
+            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/> implementation to use 
+            when comparing keys.</param>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="collection"/> is a null reference (Nothing in Visual Basic).
+            -or-
+            <paramref name="comparer"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="concurrencyLevel"/> is less than 1.
+            </exception>
+            <exception cref="T:System.ArgumentException"><paramref name="collection"/> contains one or more duplicate keys.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.#ctor(System.Int32,System.Int32,System.Collections.Generic.IEqualityComparer{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            class that is empty, has the specified concurrency level, has the specified initial capacity, and
+            uses the specified <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>.
+            </summary>
+            <param name="concurrencyLevel">The estimated number of threads that will update the
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> concurrently.</param>
+            <param name="capacity">The initial number of elements that the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            can contain.</param>
+            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer{TKey}"/>
+            implementation to use when comparing keys.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="concurrencyLevel"/> is less than 1. -or-
+            <paramref name="capacity"/> is less than 0.
+            </exception>
+            <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryAdd(`0,`1)">
+            <summary>
+            Attempts to add the specified key and value to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.
+            </summary>
+            <param name="key">The key of the element to add.</param>
+            <param name="value">The value of the element to add. The value can be a null reference (Nothing
+            in Visual Basic) for reference types.</param>
+            <returns>true if the key/value pair was added to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            successfully; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            contains too many elements.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.ContainsKey(`0)">
+            <summary>
+            Determines whether the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> contains the specified
+            key.
+            </summary>
+            <param name="key">The key to locate in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</param>
+            <returns>true if the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> contains an element with
+            the specified key; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryRemove(`0,`1@)">
+            <summary>
+            Attempts to remove and return the the value with the specified key from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.
+            </summary>
+            <param name="key">The key of the element to remove and return.</param>
+            <param name="value">When this method returns, <paramref name="value"/> contains the object removed from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> or the default value of <typeparamref name="TValue"/>
+            if the operation failed.</param>
+            <returns>true if an object was removed successfully; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryRemoveInternal(`0,`1@,System.Boolean,`1)">
+            <summary>
+            Removes the specified key from the dictionary if it exists and returns its associated value.
+            If matchValue flag is set, the key will be removed only if is associated with a particular
+            value.
+            </summary>
+            <param name="key">The key to search for and remove if it exists.</param>
+            <param name="value">The variable into which the removed value, if found, is stored.</param>
+            <param name="matchValue">Whether removal of the key is conditional on its value.</param>
+            <param name="oldValue">The conditional value to compare against if <paramref name="matchValue"/> is true</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryGetValue(`0,`1@)">
+            <summary>
+            Attempts to get the value associated with the specified key from the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.
+            </summary>
+            <param name="key">The key of the value to get.</param>
+            <param name="value">When this method returns, <paramref name="value"/> contains the object from
+            the
+            <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> with the spedified key or the default value of
+            <typeparamref name="TValue"/>, if the operation failed.</param>
+            <returns>true if the key was found in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>;
+            otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryUpdate(`0,`1,`1)">
+            <summary>
+            Compares the existing value for the specified key with a specified value, and if they’re equal,
+            updates the key with a third value.
+            </summary>
+            <param name="key">The key whose value is compared with <paramref name="comparisonValue"/> and
+            possibly replaced.</param>
+            <param name="newValue">The value that replaces the value of the element with <paramref
+            name="key"/> if the comparison results in equality.</param>
+            <param name="comparisonValue">The value that is compared to the value of the element with
+            <paramref name="key"/>.</param>
+            <returns>true if the value with <paramref name="key"/> was equal to <paramref
+            name="comparisonValue"/> and replaced with <paramref name="newValue"/>; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null
+            reference.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.Clear">
+            <summary>
+            Removes all keys and values from the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{TKey@TValue}}#CopyTo(System.Collections.Generic.KeyValuePair{`0,`1}[],System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.Generic.ICollection"/> to an array of
+            type <see cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/>, starting at the
+            specified array index.
+            </summary>
+            <param name="array">The one-dimensional array of type <see
+            cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/>
+            that is the destination of the <see
+            cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/> elements copied from the <see
+            cref="T:System.Collections.ICollection"/>. The array must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            0.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than
+            the length of the <paramref name="array"/>. -or- The number of elements in the source <see
+            cref="T:System.Collections.ICollection"/>
+            is greater than the available space from <paramref name="index"/> to the end of the destination
+            <paramref name="array"/>.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.ToArray">
+            <summary>
+            Copies the key and value pairs stored in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> to a
+            new array.
+            </summary>
+            <returns>A new array containing a snapshot of key and value pairs copied from the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.CopyToPairs(System.Collections.Generic.KeyValuePair{`0,`1}[],System.Int32)">
+            <summary>
+            Copy dictionary contents to an array - shared implementation between ToArray and CopyTo.
+            
+            Important: the caller must hold all locks in m_locks before calling CopyToPairs.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.CopyToEntries(System.Collections.DictionaryEntry[],System.Int32)">
+            <summary>
+            Copy dictionary contents to an array - shared implementation between ToArray and CopyTo.
+            
+            Important: the caller must hold all locks in m_locks before calling CopyToEntries.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.CopyToObjects(System.Object[],System.Int32)">
+            <summary>
+            Copy dictionary contents to an array - shared implementation between ToArray and CopyTo.
+            
+            Important: the caller must hold all locks in m_locks before calling CopyToObjects.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetEnumerator">
+            <summary>Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</summary>
+            <returns>An enumerator for the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</returns>
+            <remarks>
+            The enumerator returned from the dictionary is safe to use concurrently with
+            reads and writes to the dictionary, however it does not represent a moment-in-time snapshot
+            of the dictionary.  The contents exposed through the enumerator may contain modifications
+            made to the dictionary after <see cref="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetEnumerator"/> was called.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.TryAddInternal(`0,`1,System.Boolean,System.Boolean,`1@)">
+            <summary>
+            Shared internal implementation for inserts and updates.
+            If key exists, we always return false; and if updateIfExists == true we force update with value;
+            If key doesn't exist, we always add value and return true;
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(`0,System.Func{`0,`1})">
+            <summary>
+            Adds a key/value pair to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> 
+            if the key does not already exist.
+            </summary>
+            <param name="key">The key of the element to add.</param>
+            <param name="valueFactory">The function used to generate a value for the key</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentNullException"><paramref name="valueFactory"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <returns>The value for the key.  This will be either the existing value for the key if the
+            key is already in the dictionary, or the new value for the key as returned by valueFactory
+            if the key was not in the dictionary.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(`0,`1)">
+            <summary>
+            Adds a key/value pair to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> 
+            if the key does not already exist.
+            </summary>
+            <param name="key">The key of the element to add.</param>
+            <param name="value">the value to be added, if the key does not already exist</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <returns>The value for the key.  This will be either the existing value for the key if the 
+            key is already in the dictionary, or the new value if the key was not in the dictionary.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.AddOrUpdate(`0,System.Func{`0,`1},System.Func{`0,`1,`1})">
+            <summary>
+            Adds a key/value pair to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> if the key does not already 
+            exist, or updates a key/value pair in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> if the key 
+            already exists.
+            </summary>
+            <param name="key">The key to be added or whose value should be updated</param>
+            <param name="addValueFactory">The function used to generate a value for an absent key</param>
+            <param name="updateValueFactory">The function used to generate a new value for an existing key
+            based on the key's existing value</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentNullException"><paramref name="addValueFactory"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentNullException"><paramref name="updateValueFactory"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <returns>The new value for the key.  This will be either be the result of addValueFactory (if the key was 
+            absent) or the result of updateValueFactory (if the key was present).</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.AddOrUpdate(`0,`1,System.Func{`0,`1,`1})">
+            <summary>
+            Adds a key/value pair to the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> if the key does not already 
+            exist, or updates a key/value pair in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> if the key 
+            already exists.
+            </summary>
+            <param name="key">The key to be added or whose value should be updated</param>
+            <param name="addValue">The value to be added for an absent key</param>
+            <param name="updateValueFactory">The function used to generate a new value for an existing key based on 
+            the key's existing value</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentNullException"><paramref name="updateValueFactory"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <returns>The new value for the key.  This will be either be the result of addValueFactory (if the key was 
+            absent) or the result of updateValueFactory (if the key was present).</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#IDictionary{TKey@TValue}#Add(`0,`1)">
+            <summary>
+            Adds the specified key and value to the <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.
+            </summary>
+            <param name="key">The object to use as the key of the element to add.</param>
+            <param name="value">The object to use as the value of the element to add.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <exception cref="T:System.ArgumentException">
+            An element with the same key already exists in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#IDictionary{TKey@TValue}#Remove(`0)">
+            <summary>
+            Removes the element with the specified key from the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.
+            </summary>
+            <param name="key">The key of the element to remove.</param>
+            <returns>true if the element is successfully remove; otherwise false. This method also returns
+            false if
+            <paramref name="key"/> was not found in the original <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{TKey@TValue}}#Add(System.Collections.Generic.KeyValuePair{`0,`1})">
+            <summary>
+            Adds the specified value to the <see cref="T:System.Collections.Generic.ICollection{TValue}"/>
+            with the specified key.
+            </summary>
+            <param name="keyValuePair">The <see cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/>
+            structure representing the key and value to add to the <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="keyValuePair"/> of <paramref
+            name="keyValuePair"/> is null.</exception>
+            <exception cref="T:System.OverflowException">The <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>
+            contains too many elements.</exception>
+            <exception cref="T:System.ArgumentException">An element with the same key already exists in the
+            <see cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/></exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{TKey@TValue}}#Contains(System.Collections.Generic.KeyValuePair{`0,`1})">
+            <summary>
+            Determines whether the <see cref="T:System.Collections.Generic.ICollection{TKey,TValue}"/>
+            contains a specific key and value.
+            </summary>
+            <param name="keyValuePair">The <see cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/>
+            structure to locate in the <see
+            cref="T:System.Collections.Generic.ICollection{TValue}"/>.</param>
+            <returns>true if the <paramref name="keyValuePair"/> is found in the <see
+            cref="T:System.Collections.Generic.ICollection{TKey,TValue}"/>; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{TKey@TValue}}#Remove(System.Collections.Generic.KeyValuePair{`0,`1})">
+            <summary>
+            Removes a key and value from the dictionary.
+            </summary>
+            <param name="keyValuePair">The <see
+            cref="T:System.Collections.Generic.KeyValuePair{TKey,TValue}"/>
+            structure representing the key and value to remove from the <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.</param>
+            <returns>true if the key and value represented by <paramref name="keyValuePair"/> is successfully
+            found and removed; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException">The Key property of <paramref
+            name="keyValuePair"/> is a null reference (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IEnumerable#GetEnumerator">
+            <summary>Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</summary>
+            <returns>An enumerator for the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</returns>
+            <remarks>
+            The enumerator returned from the dictionary is safe to use concurrently with
+            reads and writes to the dictionary, however it does not represent a moment-in-time snapshot
+            of the dictionary.  The contents exposed through the enumerator may contain modifications
+            made to the dictionary after <see cref="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetEnumerator"/> was called.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Add(System.Object,System.Object)">
+            <summary>
+            Adds the specified key and value to the dictionary.
+            </summary>
+            <param name="key">The object to use as the key.</param>
+            <param name="value">The object to use as the value.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="key"/> is of a type that is not assignable to the key type <typeparamref
+            name="TKey"/> of the <see cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>. -or-
+            <paramref name="value"/> is of a type that is not assignable to <typeparamref name="TValue"/>,
+            the type of values in the <see cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.
+            -or- A value with the same key already exists in the <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Contains(System.Object)">
+            <summary>
+            Gets whether the <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> contains an
+            element with the specified key.
+            </summary>
+            <param name="key">The key to locate in the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.</param>
+            <returns>true if the <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> contains
+            an element with the specified key; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException"> <paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#GetEnumerator">
+            <summary>Provides an <see cref="T:System.Collections.Generics.IDictionaryEnumerator"/> for the
+            <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.</summary>
+            <returns>An <see cref="T:System.Collections.Generics.IDictionaryEnumerator"/> for the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Remove(System.Object)">
+            <summary>
+            Removes the element with the specified key from the <see
+            cref="T:System.Collections.IDictionary"/>.
+            </summary>
+            <param name="key">The key of the element to remove.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an array, starting
+            at the specified array index.
+            </summary>
+            <param name="array">The one-dimensional array that is the destination of the elements copied from
+            the <see cref="T:System.Collections.ICollection"/>. The array must have zero-based
+            indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            0.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than
+            the length of the <paramref name="array"/>. -or- The number of elements in the source <see
+            cref="T:System.Collections.ICollection"/>
+            is greater than the available space from <paramref name="index"/> to the end of the destination
+            <paramref name="array"/>.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GrowTable(System.Collections.Concurrent.ConcurrentDictionary{`0,`1}.Node[])">
+            <summary>
+            Replaces the internal table with a larger one. To prevent multiple threads from resizing the
+            table as a result of races, the table of buckets that was deemed too small is passed in as
+            an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket
+            table has been replaced in the meantime or not.
+            </summary>
+            <param name="buckets">Reference to the bucket table that was deemed too small.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetBucketAndLockNo(System.Int32,System.Int32@,System.Int32@,System.Int32)">
+            <summary>
+            Computes the bucket and lock number for a particular key. 
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.AcquireAllLocks(System.Int32@)">
+            <summary>
+            Acquires all locks for this hash table, and increments locksAcquired by the number
+            of locks that were successfully acquired. The locks are acquired in an increasing
+            order.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.AcquireLocks(System.Int32,System.Int32,System.Int32@)">
+            <summary>
+            Acquires a contiguous range of locks for this hash table, and increments locksAcquired
+            by the number of locks that were successfully acquired. The locks are acquired in an
+            increasing order.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.ReleaseLocks(System.Int32,System.Int32)">
+            <summary>
+            Releases a contiguous range of locks.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetKeys">
+            <summary>
+            Gets a collection containing the keys in the dictionary.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetValues">
+            <summary>
+            Gets a collection containing the values in the dictionary.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.Assert(System.Boolean)">
+            <summary>
+            A helper method for asserts.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.GetResource(System.String)">
+            <summary>
+            A helper function to obtain the string for a particular resource key.
+            </summary>
+            <param name="key"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.OnSerializing(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Get the data array to be serialized
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentDictionary`2.OnDeserialized(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Construct the dictionary from a previously seiralized one
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.Item(`0)">
+            <summary>
+            Gets or sets the value associated with the specified key.
+            </summary>
+            <param name="key">The key of the value to get or set.</param>
+            <value>The value associated with the specified key. If the specified key is not found, a get
+            operation throws a
+            <see cref="T:Sytem.Collections.Generic.KeyNotFoundException"/>, and a set operation creates a new
+            element with the specified key.</value>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.Collections.Generic.KeyNotFoundException">The property is retrieved and
+            <paramref name="key"/>
+            does not exist in the collection.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.Count">
+            <summary>
+            Gets the number of key/value pairs contained in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.
+            </summary>
+            <exception cref="T:System.OverflowException">The dictionary contains too many
+            elements.</exception>
+            <value>The number of key/value paris contained in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>.</value>
+            <remarks>Count has snapshot semantics and represents the number of items in the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/>
+            at the moment when Count was accessed.</remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.IsEmpty">
+            <summary>
+            Gets a value that indicates whether the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> is empty.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Concurrent.ConcurrentDictionary`2"/> is empty; otherwise,
+            false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.Keys">
+            <summary>
+            Gets a collection containing the keys in the <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.
+            </summary>
+            <value>An <see cref="T:System.Collections.Generic.ICollection{TKey}"/> containing the keys in the
+            <see cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.Values">
+            <summary>
+            Gets a collection containing the values in the <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.
+            </summary>
+            <value>An <see cref="T:System.Collections.Generic.ICollection{TValue}"/> containing the values in
+            the
+            <see cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{TKey@TValue}}#IsReadOnly">
+            <summary>
+            Gets a value indicating whether the dictionary is read-only.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Generic.ICollection{TKey,TValue}"/> is
+            read-only; otherwise, false. For <see
+            cref="T:System.Collections.Generic.Dictionary{TKey,TValue}"/>, this property always returns
+            false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#IsFixedSize">
+            <summary>
+            Gets a value indicating whether the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> has a fixed size.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> has a
+            fixed size; otherwise, false. For <see
+            cref="T:System.Collections.Generic.ConcurrentDictionary{TKey,TValue}"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#IsReadOnly">
+            <summary>
+            Gets a value indicating whether the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> is read-only.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/> is
+            read-only; otherwise, false. For <see
+            cref="T:System.Collections.Generic.ConcurrentDictionary{TKey,TValue}"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Keys">
+            <summary>
+            Gets an <see cref="T:System.Collections.ICollection"/> containing the keys of the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.
+            </summary>
+            <value>An <see cref="T:System.Collections.ICollection"/> containing the keys of the <see
+            cref="T:System.Collections.Generic.IDictionary{TKey,TValue}"/>.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Values">
+            <summary>
+            Gets an <see cref="T:System.Collections.ICollection"/> containing the values in the <see
+            cref="T:System.Collections.IDictionary"/>.
+            </summary>
+            <value>An <see cref="T:System.Collections.ICollection"/> containing the values in the <see
+            cref="T:System.Collections.IDictionary"/>.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#IDictionary#Item(System.Object)">
+            <summary>
+            Gets or sets the value associated with the specified key.
+            </summary>
+            <param name="key">The key of the value to get or set.</param>
+            <value>The value associated with the specified key, or a null reference (Nothing in Visual Basic)
+            if <paramref name="key"/> is not in the dictionary or <paramref name="key"/> is of a type that is
+            not assignable to the key type <typeparamref name="TKey"/> of the <see
+            cref="T:System.Collections.Generic.ConcurrentDictionary{TKey,TValue}"/>.</value>
+            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentException">
+            A value is being assigned, and <paramref name="key"/> is of a type that is not assignable to the
+            key type <typeparamref name="TKey"/> of the <see
+            cref="T:System.Collections.Generic.ConcurrentDictionary{TKey,TValue}"/>. -or- A value is being
+            assigned, and <paramref name="key"/> is of a type that is not assignable to the value type
+            <typeparamref name="TValue"/> of the <see
+            cref="T:System.Collections.Generic.ConcurrentDictionary{TKey,TValue}"/>
+            </exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#ICollection#IsSynchronized">
+            <summary>
+            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is
+            synchronized with the SyncRoot.
+            </summary>
+            <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
+            (thread safe); otherwise, false. For <see
+            cref="T:System.Collections.Concurrent.ConcurrentDictionary{TKey,TValue}"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.System#Collections#ICollection#SyncRoot">
+            <summary>
+            Gets an object that can be used to synchronize access to the <see
+            cref="T:System.Collections.ICollection"/>. This property is not supported.
+            </summary>
+            <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentDictionary`2.DefaultConcurrencyLevel">
+            <summary>
+            The number of concurrent writes for which to optimize by default.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentDictionary`2.Node">
+            <summary>
+            A node in a singly-linked list representing a particular hash table bucket.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentDictionary`2.DictionaryEnumerator">
+            <summary>
+            A private class to represent enumeration over the dictionary that implements the 
+            IDictionaryEnumerator interface.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentQueue`1">
+            <summary>
+            Represents a thread-safe first-in, first-out collection of objects.
+            </summary>
+            <typeparam name="T">Specifies the type of elements in the queue.</typeparam>
+            <remarks>
+            All public  and protected members of <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> are thread-safe and may be used
+            concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.IProducerConsumerCollection`1">
+            <summary>
+            Defines methods to manipulate thread-safe collections intended for producer/consumer usage.
+            </summary>
+            <typeparam name="T">Specifies the type of elements in the collection.</typeparam>
+            <remarks>
+            All implementations of this interface must enable all members of this interface
+            to be used concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.IProducerConsumerCollection`1.CopyTo(`0[],System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/> to
+            an
+            <see cref="T:System.Array"/>, starting at a specified index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of
+            the elements copied from the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/>.
+            The array must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than the
+            length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> is greater than the
+            available space from <paramref name="index"/> to the end of the destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.IProducerConsumerCollection`1.TryAdd(`0)">
+            <summary>
+            Attempts to add an object to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/>.
+            </summary>
+            <param name="item">The object to add to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/>.</param>
+            <returns>true if the object was added successfully; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentException">The <paramref name="item"/> was invalid for this collection.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.IProducerConsumerCollection`1.TryTake(`0@)">
+            <summary>
+            Attempts to remove and return an object from the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/>.
+            </summary>
+            <param name="item">
+            When this method returns, if the object was removed and returned successfully, <paramref name="item"/> contains the removed object. If no object was available to be removed, the value is
+            unspecified.
+            </param>
+            <returns>true if an object was removed and returned successfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.IProducerConsumerCollection`1.ToArray">
+            <summary>
+            Copies the elements contained in the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/> to a new array.
+            </summary>
+            <returns>A new array containing the elements copied from the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection`1"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> class.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.InitializeFromCollection(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Initializes the contents of the queue from an existing collection.
+            </summary>
+            <param name="collection">A collection from which to copy elements.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>
+            class that contains elements copied from the specified collection
+            </summary>
+            <param name="collection">The collection whose elements are copied to the new <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
+            null.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.OnSerializing(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Get the data array to be serialized
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.OnDeserialized(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Construct the queue from a previously seiralized one
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see cref="T:System.Array"/>, starting at a particular
+            <see cref="T:System.Array"/> index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
+            destination of the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag"/>. The <see cref="T:System.Array">Array</see> must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="array"/> is multidimensional. -or-
+            <paramref name="array"/> does not have zero-based indexing. -or-
+            <paramref name="index"/> is equal to or greater than the length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
+            greater than the available space from <paramref name="index"/> to the end of the destination
+            <paramref name="array"/>. -or- The type of the source <see cref="T:System.Collections.ICollection"/> cannot be cast automatically to the type of the
+            destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through a collection.
+            </summary>
+            <returns>An <see cref="T:System.Collections.IEnumerator"/> that can be used to iterate through the collection.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#Concurrent#IProducerConsumerCollection{T}#TryAdd(`0)">
+            <summary>
+            Attempts to add an object to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
+            </summary>
+            <param name="item">The object to add to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. The value can be a null
+            reference (Nothing in Visual Basic) for reference types.
+            </param>
+            <returns>true if the object was added successfully; otherwise, false.</returns>
+            <remarks>For <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>, this operation will always add the object to the
+            end of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>
+            and return true.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#Concurrent#IProducerConsumerCollection{T}#TryTake(`0@)">
+            <summary>
+            Attempts to remove and return an object from the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
+            </summary>
+            <param name="item">
+            When this method returns, if the operation was successful, <paramref name="item"/> contains the
+            object removed. If no object was available to be removed, the value is unspecified.
+            </param>
+            <returns>true if an element was removed and returned succesfully; otherwise, false.</returns>
+            <remarks>For <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>, this operation will attempt to remove the object
+            from the beginning of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.ToArray">
+            <summary>
+            Copies the elements stored in the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> to a new array.
+            </summary>
+            <returns>A new array containing a snapshot of elements copied from the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.ToList">
+            <summary>
+            Copies the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> elements to a new <see cref="T:System.Collections.Generic.List{T}"/>.
+            </summary>
+            <returns>A new <see cref="T:System.Collections.Generic.List{T}"/> containing a snapshot of
+            elements copied from the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.GetHeadTailPositions(System.Collections.Concurrent.ConcurrentQueue{`0}.Segment@,System.Collections.Concurrent.ConcurrentQueue{`0}.Segment@,System.Int32@,System.Int32@)">
+            <summary>
+            Store the position of the current head and tail positions.
+            </summary>
+            <param name="head">return the head segment</param>
+            <param name="tail">return the tail segment</param>
+            <param name="headLow">return the head offset</param>
+            <param name="tailHigh">return the tail offset</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.CopyTo(`0[],System.Int32)">
+            <summary>
+            Copies the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> elements to an existing one-dimensional <see cref="T:System.Array">Array</see>, starting at the specified array index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
+            destination of the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>. The <see cref="T:System.Array">Array</see> must have zero-based
+            indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than the
+            length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> is greater than the
+            available space from <paramref name="index"/> to the end of the destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.
+            </summary>
+            <returns>An enumerator for the contents of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.</returns>
+            <remarks>
+            The enumeration represents a moment-in-time snapshot of the contents
+            of the queue.  It does not reflect any updates to the collection after 
+            <see cref="M:System.Collections.Concurrent.ConcurrentQueue`1.GetEnumerator"/> was called.  The enumerator is safe to use
+            concurrently with reads from and writes to the queue.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Enqueue(`0)">
+            <summary>
+            Adds an object to the end of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.
+            </summary>
+            <param name="item">The object to add to the end of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>. The value can be a null reference
+            (Nothing in Visual Basic) for reference types.
+            </param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.TryDequeue(`0@)">
+            <summary>
+            Attempts to remove and return the object at the beginning of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.
+            </summary>
+            <param name="result">
+            When this method returns, if the operation was successful, <paramref name="result"/> contains the
+            object removed. If no object was available to be removed, the value is unspecified.
+            </param>
+            <returns>true if an element was removed and returned from the beggining of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>
+            succesfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.TryPeek(`0@)">
+            <summary>
+            Attempts to return an object from the beginning of the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>
+            without removing it.
+            </summary>
+            <param name="result">When this method returns, <paramref name="result"/> contains an object from
+            the beginning of the <see cref="T:System.Collections.Concurrent.ConccurrentQueue{T}"/> or an
+            unspecified value if the operation failed.</param>
+            <returns>true if and object was returned successfully; otherwise, false.</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#ICollection#IsSynchronized">
+            <summary>
+            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is
+            synchronized with the SyncRoot.
+            </summary>
+            <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
+            with the SyncRoot; otherwise, false. For <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.System#Collections#ICollection#SyncRoot">
+            <summary>
+            Gets an object that can be used to synchronize access to the <see
+            cref="T:System.Collections.ICollection"/>. This property is not supported.
+            </summary>
+            <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.IsEmpty">
+            <summary>
+            Gets a value that indicates whether the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> is empty.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/> is empty; otherwise, false.</value>
+            <remarks>
+            For determining whether the collection contains any items, use of this property is recommended
+            rather than retrieving the number of items from the <see cref="P:System.Collections.Concurrent.ConcurrentQueue`1.Count"/> property and comparing it
+            to 0.  However, as this collection is intended to be accessed concurrently, it may be the case
+            that another thread will modify the collection after <see cref="P:System.Collections.Concurrent.ConcurrentQueue`1.IsEmpty"/> returns, thus invalidating
+            the result.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.Count">
+            <summary>
+            Gets the number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.
+            </summary>
+            <value>The number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1"/>.</value>
+            <remarks>
+            For determining whether the collection contains any items, use of the <see cref="P:System.Collections.Concurrent.ConcurrentQueue`1.IsEmpty"/>
+            property is recommended rather than retrieving the number of items from the <see cref="P:System.Collections.Concurrent.ConcurrentQueue`1.Count"/>
+            property and comparing it to 0.
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentQueue`1.Segment">
+            <summary>
+            private class for ConcurrentQueue. 
+            a queue is a linked list of small arrays, each node is called a segment.
+            A segment contains an array, a pointer to the next segment, and m_low, m_high indices recording
+            the first and last valid elements of the array.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.#ctor(System.Int64)">
+            <summary>
+            Create and initialize a segment with the specified index.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.UnsafeAdd(`0)">
+            <summary>
+            Add an element to the tail of the current segment
+            exclusively called by ConcurrentQueue.InitializedFromCollection
+            InitializeFromCollection is responsible to guaratee that there is no index overflow,
+            and there is no contention
+            </summary>
+            <param name="value"></param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.UnsafeGrow">
+            <summary>
+            Create a new segment and append to the current one
+            Does not update the m_tail pointer
+            exclusively called by ConcurrentQueue.InitializedFromCollection
+            InitializeFromCollection is responsible to guaratee that there is no index overflow,
+            and there is no contention
+            </summary>
+            <returns>the reference to the new Segment</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.Grow(System.Collections.Concurrent.ConcurrentQueue{`0}.Segment@)">
+            <summary>
+            Create a new segment and append to the current one
+            Update the m_tail pointer
+            This method is called when there is no contention
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.TryAppend(`0,System.Collections.Concurrent.ConcurrentQueue{`0}.Segment@)">
+            <summary>
+            Try to append an element at the end of this segment.
+            </summary>
+            <param name="value">the element to append</param>
+            <param name="tail">The tail.</param>
+            <returns>true if the element is appended, false if the current segment is full</returns>
+            <remarks>if appending the specified element succeeds, and after which the segment is full, 
+            then grow the segment</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.TryRemove(`0@,System.Collections.Concurrent.ConcurrentQueue{`0}.Segment@)">
+            <summary>
+            try to remove an element from the head of current segment
+            </summary>
+            <param name="result">The result.</param>
+            <param name="head">The head.</param>
+            <returns>return false only if the current segment is empty</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.TryPeek(`0@)">
+            <summary>
+            try to peek the current segment
+            </summary>
+            <param name="result">holds the return value of the element at the head position, 
+            value set to default(T) if there is no such an element</param>
+            <returns>true if there are elements in the current segment, false otherwise</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentQueue`1.Segment.ToList(System.Int32,System.Int32)">
+            <summary>
+            Convert part or all of the current segment into a List
+            </summary>
+            <param name="start">the start position</param>
+            <param name="end">the end position</param>
+            <returns>the result list </returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.Segment.Next">
+            <summary>
+            return the next segment
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.Segment.IsEmpty">
+            <summary>
+            return true if the current segment is empty (doesn't have any element available to dequeue, 
+            false otherwise
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.Segment.Low">
+            <summary>
+            return the position of the head of the current segment
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentQueue`1.Segment.High">
+            <summary>
+            return the logical position of the tail of the current segment      
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentStack`1">
+            <summary>
+            Represents a thread-safe last-in, first-out collection of objects.
+            </summary>
+            <typeparam name="T">Specifies the type of elements in the stack.</typeparam>
+            <remarks>
+            All public and protected members of <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> are thread-safe and may be used
+            concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            class.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            class that contains elements copied from the specified collection
+            </summary>
+            <param name="collection">The collection whose elements are copied to the new <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
+            null.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.InitializeFromCollection(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Initializes the contents of the stack from an existing collection.
+            </summary>
+            <param name="collection">A collection from which to copy elements.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.OnSerializing(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Get the data array to be serialized
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.OnDeserialized(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Construct the stack from a previously seiralized one
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.Clear">
+            <summary>
+            Removes all objects from the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see cref="T:System.Array"/>, starting at a particular
+            <see cref="T:System.Array"/> index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of
+            the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>. The <see cref="T:System.Array"/> must
+            have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="array"/> is multidimensional. -or-
+            <paramref name="array"/> does not have zero-based indexing. -or-
+            <paramref name="index"/> is equal to or greater than the length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
+            greater than the available space from <paramref name="index"/> to the end of the destination
+            <paramref name="array"/>. -or- The type of the source <see cref="T:System.Collections.ICollection"/> cannot be cast automatically to the type of the
+            destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.CopyTo(`0[],System.Int32)">
+            <summary>
+            Copies the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> elements to an existing one-dimensional <see cref="T:System.Array"/>, starting at the specified array index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of
+            the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>. The <see cref="T:System.Array"/> must have zero-based
+            indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than the
+            length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> is greater than the
+            available space from <paramref name="index"/> to the end of the destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.Push(`0)">
+            <summary>
+            Inserts an object at the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </summary>
+            <param name="item">The object to push onto the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>. The value can be
+            a null reference (Nothing in Visual Basic) for reference types.
+            </param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.PushRange(`0[])">
+            <summary>
+            Inserts multiple objects at the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> atomically.
+            </summary>
+            <param name="items">The objects to push onto the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="items"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <remarks>
+            When adding multiple items to the stack, using PushRange is a more efficient
+            mechanism than using <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.Push(`0)"/> one item at a time.  Additionally, PushRange
+            guarantees that all of the elements will be added atomically, meaning that no other threads will
+            be able to inject elements between the elements being pushed.  Items at lower indices in
+            the <paramref name="items"/> array will be pushed before items at higher indices.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.PushRange(`0[],System.Int32,System.Int32)">
+            <summary>
+            Inserts multiple objects at the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> atomically.
+            </summary>
+            <param name="items">The objects to push onto the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <param name="startIndex">The zero-based offset in <paramref name="items"/> at which to begin
+            inserting elements onto the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <param name="count">The number of elements to be inserted onto the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="items"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref name="count"/> is negative. Or <paramref name="startIndex"/> is greater than or equal to the length 
+            of <paramref name="items"/>.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="startIndex"/> + <paramref name="count"/> is
+            greater than the length of <paramref name="items"/>.</exception>
+            <remarks>
+            When adding multiple items to the stack, using PushRange is a more efficient
+            mechanism than using <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.Push(`0)"/> one item at a time. Additionally, PushRange
+            guarantees that all of the elements will be added atomically, meaning that no other threads will
+            be able to inject elements between the elements being pushed. Items at lower indices in the
+            <paramref name="items"/> array will be pushed before items at higher indices.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.PushCore(System.Collections.Concurrent.ConcurrentStack{`0}.Node,System.Collections.Concurrent.ConcurrentStack{`0}.Node)">
+            <summary>
+            Push one or many nodes into the stack, if head and tails are equal then push one node to the stack other wise push the list between head
+            and tail to the stack
+            </summary>
+            <param name="head">The head pointer to the new list</param>
+            <param name="tail">The tail pointer to the new list</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.ValidatePushPopRangeInput(`0[],System.Int32,System.Int32)">
+            <summary>
+            Local helper function to validate the Pop Push range methods input
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#Concurrent#IProducerConsumerCollection{T}#TryAdd(`0)">
+            <summary>
+            Attempts to add an object to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
+            </summary>
+            <param name="item">The object to add to the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. The value can be a null
+            reference (Nothing in Visual Basic) for reference types.
+            </param>
+            <returns>true if the object was added successfully; otherwise, false.</returns>
+            <remarks>For <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>, this operation
+            will always insert the object onto the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            and return true.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPeek(`0@)">
+            <summary>
+            Attempts to return an object from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            without removing it.
+            </summary>
+            <param name="result">When this method returns, <paramref name="result"/> contains an object from
+            the top of the <see cref="T:System.Collections.Concurrent.ConccurrentStack{T}"/> or an
+            unspecified value if the operation failed.</param>
+            <returns>true if and object was returned successfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPop(`0@)">
+            <summary>
+            Attempts to pop and return the object at the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </summary>
+            <param name="result">
+            When this method returns, if the operation was successful, <paramref name="result"/> contains the
+            object removed. If no object was available to be removed, the value is unspecified.
+            </param>
+            <returns>true if an element was removed and returned from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            succesfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPopRange(`0[])">
+            <summary>
+            Attempts to pop and return multiple objects from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            atomically.
+            </summary>
+            <param name="items">
+            The <see cref="T:System.Array"/> to which objects popped from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> will be added.
+            </param>
+            <returns>The number of objects successfully popped from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> and inserted in
+            <paramref name="items"/>.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="items"/> is a null argument (Nothing
+            in Visual Basic).</exception>
+            <remarks>
+            When popping multiple items, if there is little contention on the stack, using
+            TryPopRange can be more efficient than using <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.TryPop(`0@)"/>
+            once per item to be removed.  Nodes fill the <paramref name="items"/>
+            with the first node to be popped at the startIndex, the second node to be popped
+            at startIndex + 1, and so on.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPopRange(`0[],System.Int32,System.Int32)">
+            <summary>
+            Attempts to pop and return multiple objects from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>
+            atomically.
+            </summary>
+            <param name="items">
+            The <see cref="T:System.Array"/> to which objects popped from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> will be added.
+            </param>
+            <param name="startIndex">The zero-based offset in <paramref name="items"/> at which to begin
+            inserting elements from the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</param>
+            <param name="count">The number of elements to be popped from top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> and inserted into <paramref name="items"/>.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="items"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref name="count"/> is negative. Or <paramref name="startIndex"/> is greater than or equal to the length 
+            of <paramref name="items"/>.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="startIndex"/> + <paramref name="count"/> is
+            greater than the length of <paramref name="items"/>.</exception>
+            <remarks>
+            When popping multiple items, if there is little contention on the stack, using
+            TryPopRange can be more efficient than using <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.TryPop(`0@)"/>
+            once per item to be removed.  Nodes fill the <paramref name="items"/>
+            with the first node to be popped at the startIndex, the second node to be popped
+            at startIndex + 1, and so on.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPopCore(`0@)">
+            <summary>
+            Local helper function to Pop an item from the stack, slow path
+            </summary>
+            <param name="result">The popped item</param>
+            <returns>True if succeeded, false otherwise</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.TryPopCore(System.Int32,System.Collections.Concurrent.ConcurrentStack{`0}.Node@)">
+            <summary>
+            Slow path helper for TryPop. This method assumes an initial attempt to pop an element
+            has already occurred and failed, so it begins spinning right away.
+            </summary>
+            <param name="count">The number of items to pop.</param>
+            <param name="poppedHead">
+            When this method returns, if the pop succeeded, contains the removed object. If no object was
+            available to be removed, the value is unspecified. This parameter is passed uninitialized.
+            </param>
+            <returns>True if an element was removed and returned; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.CopyRemovedItems(System.Collections.Concurrent.ConcurrentStack{`0}.Node,`0[],System.Int32,System.Int32)">
+            <summary>
+            Local helper function to copy the poped elements into a given collection
+            </summary>
+            <param name="head">The head of the list to be copied</param>
+            <param name="collection">The collection to place the popped items in</param>
+            <param name="startIndex">the beginning of index of where to place the popped items</param>
+            <param name="nodesCount">The number of nodes.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#Concurrent#IProducerConsumerCollection{T}#TryTake(`0@)">
+            <summary>
+            Attempts to remove and return an object from the <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>.
+            </summary>
+            <param name="item">
+            When this method returns, if the operation was successful, <paramref name="item"/> contains the
+            object removed. If no object was available to be removed, the value is unspecified.
+            </param>
+            <returns>true if an element was removed and returned succesfully; otherwise, false.</returns>
+            <remarks>For <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>, this operation will attempt to pope the object at
+            the top of the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.ToArray">
+            <summary>
+            Copies the items stored in the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> to a new array.
+            </summary>
+            <returns>A new array containing a snapshot of elements copied from the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.ToList">
+            <summary>
+            Returns an array containing a snapshot of the list's contents, using
+            the target list node as the head of a region in the list.
+            </summary>
+            <returns>An array of the list's contents.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </summary>
+            <returns>An enumerator for the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</returns>
+            <remarks>
+            The enumeration represents a moment-in-time snapshot of the contents
+            of the stack.  It does not reflect any updates to the collection after 
+            <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.GetEnumerator"/> was called.  The enumerator is safe to use
+            concurrently with reads from and writes to the stack.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through a collection.
+            </summary>
+            <returns>An <see cref="T:System.Collections.IEnumerator"/> that can be used to iterate through
+            the collection.</returns>
+            <remarks>
+            The enumeration represents a moment-in-time snapshot of the contents of the stack. It does not
+            reflect any updates to the collection after
+            <see cref="M:System.Collections.Concurrent.ConcurrentStack`1.GetEnumerator"/> was called. The enumerator is safe to use concurrently with reads
+            from and writes to the stack.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentStack`1.IsEmpty">
+            <summary>
+            Gets a value that indicates whether the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> is empty.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/> is empty; otherwise, false.</value>
+            <remarks>
+            For determining whether the collection contains any items, use of this property is recommended
+            rather than retrieving the number of items from the <see cref="P:System.Collections.Concurrent.ConcurrentStack`1.Count"/> property and comparing it
+            to 0.  However, as this collection is intended to be accessed concurrently, it may be the case
+            that another thread will modify the collection after <see cref="P:System.Collections.Concurrent.ConcurrentStack`1.IsEmpty"/> returns, thus invalidating
+            the result.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentStack`1.Count">
+            <summary>
+            Gets the number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.
+            </summary>
+            <value>The number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>.</value>
+            <remarks>
+            For determining whether the collection contains any items, use of the <see cref="P:System.Collections.Concurrent.ConcurrentStack`1.IsEmpty"/>
+            property is recommended rather than retrieving the number of items from the <see cref="P:System.Collections.Concurrent.ConcurrentStack`1.Count"/>
+            property and comparing it to 0.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#ICollection#IsSynchronized">
+            <summary>
+            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is
+            synchronized with the SyncRoot.
+            </summary>
+            <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
+            with the SyncRoot; otherwise, false. For <see cref="T:System.Collections.Concurrent.ConcurrentStack`1"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentStack`1.System#Collections#ICollection#SyncRoot">
+            <summary>
+            Gets an object that can be used to synchronize access to the <see
+            cref="T:System.Collections.ICollection"/>. This property is not supported.
+            </summary>
+            <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported</exception>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentStack`1.Node">
+            <summary>
+            A simple (internal) node type used to store elements of concurrent stacks and queues.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentStack`1.Node.#ctor(`0)">
+            <summary>
+            Constructs a new node with the specified value and no next node.
+            </summary>
+            <param name="value">The value of the node.</param>
+        </member>
+        <member name="T:System.Collections.Concurrent.SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView`1">
+            <summary>
+            A debugger view of the IProducerConsumerCollection that makes it simple to browse the
+            collection's contents at a point in time.
+            </summary>
+            <typeparam name="T">The type of elements stored within.</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView`1.#ctor(System.Collections.Concurrent.IProducerConsumerCollection{`0})">
+            <summary>
+            Constructs a new debugger view object for the provided collection object.
+            </summary>
+            <param name="collection">A collection to browse in the debugger.</param>
+        </member>
+        <member name="P:System.Collections.Concurrent.SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView`1.Items">
+            <summary>
+            Returns a snapshot of the underlying collection's elements.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.OrderablePartitioner`1">
+            <summary>
+            Represents a particular manner of splitting an orderable data source into multiple partitions.
+            </summary>
+            <typeparam name="TSource">Type of the elements in the collection.</typeparam>
+            <remarks>
+            <para>
+            Each element in each partition has an integer index associated with it, which determines the relative
+            order of that element against elements in other partitions.
+            </para>
+            <para>
+            Inheritors of <see cref="T:System.Collections.Concurrent.OrderablePartitioner`1"/> must adhere to the following rules:
+            <ol>
+            <li>All indices must be unique, such that there may not be duplicate indices. If all indices are not
+            unique, the output ordering may be scrambled.</li>
+            <li>All indices must be non-negative. If any indices are negative, consumers of the implementation
+            may throw exceptions.</li>
+            <li><see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetPartitions(System.Int32)"/> and <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)"/> should throw a
+            <see cref="T:System.ArgumentOutOfRangeException"/> if the requested partition count is less than or
+            equal to zero.</li>
+            <li><see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetPartitions(System.Int32)"/> and <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)"/> should always return a number
+            of enumerables equal to the requested partition count. If the partitioner runs out of data and cannot
+            create as many partitions as requested, an empty enumerator should be returned for each of the
+            remaining partitions. If this rule is not followed, consumers of the implementation may throw a <see cref="T:System.InvalidOperationException"/>.</li>
+            <li><see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetPartitions(System.Int32)"/>, <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)"/>,
+            <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetDynamicPartitions"/>, and <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderableDynamicPartitions"/>
+            should never return null. If null is returned, a consumer of the implementation may throw a
+            <see cref="T:System.InvalidOperationException"/>.</li>
+            <li><see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetPartitions(System.Int32)"/>, <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)"/>,
+            <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetDynamicPartitions"/>, and <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderableDynamicPartitions"/>
+            should always return partitions that can fully and uniquely enumerate the input data source. All of
+            the data and only the data contained in the input source should be enumerated, with no duplication
+            that was not already in the input, unless specifically required by the particular partitioner's
+            design. If this is not followed, the output ordering may be scrambled.</li>
+            <li>If <see cref="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysOrderedInEachPartition"/> returns true, each partition must return elements
+            with increasing key indices.</li>
+            <li>If <see cref="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysOrderedAcrossPartitions"/> returns true, all the keys in partition numbered N
+            must be larger than all the keys in partition numbered N-1.</li>
+            <li>If <see cref="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysNormalized"/> returns true, all indices must be monotonically increasing from
+            0, though not necessarily within a single partition.</li>
+            </ol>
+            </para>
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner`1">
+            <summary>
+            Represents a particular manner of splitting a data source into multiple partitions.
+            </summary>
+            <typeparam name="TSource">Type of the elements in the collection.</typeparam>
+            <remarks>
+            <para>
+            Inheritors of <see cref="T:System.Collections.Concurrent.Partitioner`1"/> must adhere to the following rules:
+            <ol>
+            <li><see cref="M:System.Collections.Concurrent.Partitioner`1.GetPartitions(System.Int32)"/> should throw a
+            <see cref="T:System.ArgumentOutOfRangeException"/> if the requested partition count is less than or
+            equal to zero.</li>
+            <li><see cref="M:System.Collections.Concurrent.Partitioner`1.GetPartitions(System.Int32)"/> should always return a number of enumerables equal to the requested
+            partition count. If the partitioner runs out of data and cannot create as many partitions as 
+            requested, an empty enumerator should be returned for each of the remaining partitions. If this rule
+            is not followed, consumers of the implementation may throw a <see cref="T:System.InvalidOperationException"/>.</li>
+            <li><see cref="M:System.Collections.Concurrent.Partitioner`1.GetPartitions(System.Int32)"/> and <see cref="M:System.Collections.Concurrent.Partitioner`1.GetDynamicPartitions"/>
+            should never return null. If null is returned, a consumer of the implementation may throw a
+            <see cref="T:System.InvalidOperationException"/>.</li>
+            <li><see cref="M:System.Collections.Concurrent.Partitioner`1.GetPartitions(System.Int32)"/> and <see cref="M:System.Collections.Concurrent.Partitioner`1.GetDynamicPartitions"/> should always return
+            partitions that can fully and uniquely enumerate the input data source. All of the data and only the
+            data contained in the input source should be enumerated, with no duplication that was not already in
+            the input, unless specifically required by the particular partitioner's design. If this is not
+            followed, the output ordering may be scrambled.</li>
+            </ol>
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner`1.GetPartitions(System.Int32)">
+            <summary>
+            Partitions the underlying collection into the given number of partitions.
+            </summary>
+            <param name="partitionCount">The number of partitions to create.</param>
+            <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner`1.GetDynamicPartitions">
+            <summary>
+            Creates an object that can partition the underlying collection into a variable number of
+            partitions.
+            </summary>
+            <remarks>
+            <para>
+            The returned object implements the <see cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see cref="M:System.Collections.Generic.IEnumerable`1.GetEnumerator">GetEnumerator</see> on the
+            object creates another partition over the sequence.
+            </para>
+            <para>
+            The <see cref="M:System.Collections.Concurrent.Partitioner`1.GetDynamicPartitions"/> method is only supported if the <see cref="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions"/>
+            property returns true.
+            </para>
+            </remarks>
+            <returns>An object that can create partitions over the underlying data source.</returns>
+            <exception cref="T:System.NotSupportedException">Dynamic partitioning is not supported by this
+            partitioner.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions">
+            <summary>
+            Gets whether additional partitions can be created dynamically.
+            </summary>
+            <returns>
+            true if the <see cref="T:System.Collections.Concurrent.Partitioner`1"/> can create partitions dynamically as they are
+            requested; false if the <see cref="T:System.Collections.Concurrent.Partitioner`1"/> can only allocate
+            partitions statically.
+            </returns>
+            <remarks>
+            <para>
+            If a derived class does not override and implement <see cref="M:System.Collections.Concurrent.Partitioner`1.GetDynamicPartitions"/>,
+            <see cref="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions"/> should return false. The value of <see cref="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions"/> should not vary over the lifetime of this instance.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.OrderablePartitioner`1.#ctor(System.Boolean,System.Boolean,System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.OrderablePartitioner`1"/> class with the
+            specified constraints on the index keys.
+            </summary>
+            <param name="keysOrderedInEachPartition">
+            Indicates whether the elements in each partition are yielded in the order of
+            increasing keys.
+            </param>
+            <param name="keysOrderedAcrossPartitions">
+            Indicates whether elements in an earlier partition always come before
+            elements in a later partition. If true, each element in partition 0 has a smaller order key than
+            any element in partition 1, each element in partition 1 has a smaller order key than any element
+            in partition 2, and so on.
+            </param>
+            <param name="keysNormalized">
+            Indicates whether keys are normalized. If true, all order keys are distinct
+            integers in the range [0 .. numberOfElements-1]. If false, order keys must still be dictinct, but
+            only their relative order is considered, not their absolute values.
+            </param>
+        </member>
+        <member name="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)">
+            <summary>
+            Partitions the underlying collection into the specified number of orderable partitions.
+            </summary>
+            <remarks>
+            Each partition is represented as an enumerator over key-value pairs.
+            The value of the pair is the element itself, and the key is an integer which determines
+            the relative ordering of this element against other elements in the data source.
+            </remarks>
+            <param name="partitionCount">The number of partitions to create.</param>
+            <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderableDynamicPartitions">
+            <summary>
+            Creates an object that can partition the underlying collection into a variable number of
+            partitions.
+            </summary>
+            <remarks>
+            <para>
+            The returned object implements the <see cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see cref="M:System.Collections.Generic.IEnumerable`1.GetEnumerator">GetEnumerator</see> on the
+            object creates another partition over the sequence.
+            </para>
+            <para>
+            Each partition is represented as an enumerator over key-value pairs. The value in the pair is the element
+            itself, and the key is an integer which determines the relative ordering of this element against
+            other elements.
+            </para>
+            <para>
+            The <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderableDynamicPartitions"/> method is only supported if the <see cref="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions">SupportsDynamicPartitions</see>
+            property returns true.
+            </para>
+            </remarks>
+            <returns>An object that can create partitions over the underlying data source.</returns>
+            <exception cref="T:System.NotSupportedException">Dynamic partitioning is not supported by this
+            partitioner.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.OrderablePartitioner`1.GetPartitions(System.Int32)">
+            <summary>
+            Partitions the underlying collection into the given number of ordered partitions.
+            </summary>
+            <remarks>
+            The default implementation provides the same behavior as <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderablePartitions(System.Int32)"/> except
+            that the returned set of partitions does not provide the keys for the elements.
+            </remarks>
+            <param name="partitionCount">The number of partitions to create.</param>
+            <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.OrderablePartitioner`1.GetDynamicPartitions">
+            <summary>
+            Creates an object that can partition the underlying collection into a variable number of
+            partitions.
+            </summary>
+            <remarks>
+            <para>
+            The returned object implements the <see cref="T:System.Collections.Generic.IEnumerable{TSource}"/> interface. Calling <see cref="M:System.Collections.Generic.IEnumerable`1.GetEnumerator">GetEnumerator</see> on the
+            object creates another partition over the sequence.
+            </para>
+            <para>
+            The default implementation provides the same behavior as <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetOrderableDynamicPartitions"/> except
+            that the returned set of partitions does not provide the keys for the elements.
+            </para>
+            <para>
+            The <see cref="M:System.Collections.Concurrent.OrderablePartitioner`1.GetDynamicPartitions"/> method is only supported if the <see cref="P:System.Collections.Concurrent.Partitioner`1.SupportsDynamicPartitions"/>
+            property returns true.
+            </para>
+            </remarks>
+            <returns>An object that can create partitions over the underlying data source.</returns>
+            <exception cref="T:System.NotSupportedException">Dynamic partitioning is not supported by this
+            partitioner.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysOrderedInEachPartition">
+            <summary>
+            Gets whether elements in each partition are yielded in the order of increasing keys.
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysOrderedAcrossPartitions">
+            <summary>
+            Gets whether elements in an earlier partition always come before elements in a later partition.
+            </summary>
+            <remarks>
+            If <see cref="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysOrderedAcrossPartitions"/> returns true, each element in partition 0 has a
+            smaller order key than any element in partition 1, each element in partition 1 has a smaller
+            order key than any element in partition 2, and so on.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysNormalized">
+            <summary>
+            Gets whether order keys are normalized.
+            </summary>
+            <remarks>
+            If <see cref="P:System.Collections.Concurrent.OrderablePartitioner`1.KeysNormalized"/> returns true, all order keys are distinct integers in the range
+            [0 .. numberOfElements-1]. If the property returns false, order keys must still be dictinct, but
+            only their relative order is considered, not their absolute values.
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.OrderablePartitioner`1.EnumerableDropIndices">
+            <summary>
+            Converts an enumerable over key-value pairs to an enumerable over values.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner">
+            <summary>
+            Provides common partitioning strategies for arrays, lists, and enumerables.
+            </summary>
+            <remarks>
+            <para>
+            The static methods on <see cref="T:System.Collections.Concurrent.Partitioner"/> are all thread-safe and may be used concurrently
+            from multiple threads. However, while a created partitioner is in use, the underlying data source
+            should not be modified, whether from the same thread that's using a partitioner or from a separate
+            thread.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.Create``1(System.Collections.Generic.IList{``0},System.Boolean)">
+            <summary>
+            Creates an orderable partitioner from an <see cref="T:System.Collections.Generic.IList`1"/>
+            instance.
+            </summary>
+            <typeparam name="TSource">Type of the elements in source list.</typeparam>
+            <param name="list">The list to be partitioned.</param>
+            <param name="loadBalance">
+            A Boolean value that indicates whether the created partitioner should dynamically
+            load balance between partitions rather than statically partition.
+            </param>
+            <returns>
+            An orderable partitioner based on the input list.
+            </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.Create``1(``0[],System.Boolean)">
+            <summary>
+            Creates an orderable partitioner from a <see cref="T:System.Array"/> instance.
+            </summary>
+            <typeparam name="TSource">Type of the elements in source array.</typeparam>
+            <param name="array">The array to be partitioned.</param>
+            <param name="loadBalance">
+            A Boolean value that indicates whether the created partitioner should dynamically load balance
+            between partitions rather than statically partition.
+            </param>
+            <returns>
+            An orderable partitioner based on the input array.
+            </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.Create``1(System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            Creates an orderable partitioner from a <see cref="T:System.Collections.Generic.IEnumerable`1"/> instance.
+            </summary>
+            <typeparam name="TSource">Type of the elements in source enumerable.</typeparam>
+            <param name="source">The enumerable to be partitioned.</param>
+            <returns>
+            An orderable partitioner based on the input array.
+            </returns>
+            <remarks>
+            The ordering used in the created partitioner is determined by the natural order of the elements 
+            as retrieved from the source enumerable.
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2">
+            <summary>
+            DynamicPartitionEnumerator_Abstract defines the enumerator for each partition for the dynamic load-balance
+            partitioning algorithm. 
+            - Partition is an enumerator of KeyValuePairs, each corresponding to an item in the data source: 
+              the key is the index in the source collection; the value is the item itself.
+            - a set of such partitions share a reader over data source. The type of the reader is specified by
+              TSourceReader. 
+            - each partition requests a contiguous chunk of elements at a time from the source data. The chunk 
+              size is initially 1, and doubles every time until it reaches the maximum chunk size. 
+              The implementation for GrabNextChunk() method has two versions: one for data source of IndexRange 
+              types (IList and the array), one for data source of IEnumerable.
+            - The method "Reset" is not supported for any partitioning algorithm.
+            - The implementation for MoveNext() method is same for all dynanmic partitioners, so we provide it
+              in this abstract class.
+            </summary>
+            <typeparam name="TSource">Type of the elements in the data source</typeparam>
+            <typeparam name="TSourceReader">Type of the reader on the data source</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.GrabNextChunk(System.Int32)">
+            <summary>
+            Abstract method to request a contiguous chunk of elements from the source collection
+            </summary>
+            <param name="requestedChunkSize">specified number of elements requested</param>
+            <returns>
+            true if we successfully reserved at least one element (up to #=requestedChunkSize) 
+            false if all elements in the source collection have been reserved.
+            </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.Dispose">
+            <summary>
+            Dispose is abstract, and depends on the type of the source data:
+            - For source data type IList and Array, the type of the shared reader is just the dataitself.
+              We don't do anything in Dispose method for IList and Array. 
+            - For source data type IEnumerable, the type of the shared reader is an enumerator we created.
+              Thus we need to dispose this shared reader enumerator, when there is no more active partitions
+              left.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.Reset">
+            <summary>
+            Reset on partitions is not supported
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.MoveNext">
+            <summary>
+            Moves to the next element if any.
+            Try current chunk first, if the current chunk do not have any elements left, then we 
+            attempt to grab a chunk from the source collection.
+            </summary>
+            <returns>
+            true if successfully moving to the next position;
+            false otherwise, if and only if there is no more elements left in the current chunk 
+            AND the source collection is exhausted. 
+            </returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.HasNoElementsLeft">
+            <summary>
+            Abstract property, returns whether or not the shared reader has already read the last 
+            element of the source data 
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.Current">
+            <summary>
+            Get the current element in the current partition. Property required by IEnumerator interface
+            This property is abstract because the implementation is different depending on the type
+            of the source data: IList, Array or IEnumerable
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumerator_Abstract`2.System#Collections#IEnumerator#Current">
+            <summary>
+            Get the current element in the current partition. Property required by IEnumerator interface
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1">
+            <summary>
+            Inherits from DynamicPartitioners
+            Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
+            of EnumerableOfPartitionsForIEnumerator defined internally
+            </summary>
+            <typeparam name="TSource">Type of elements in the source data</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.GetOrderablePartitions(System.Int32)">
+            <summary>
+            Overrides OrderablePartitioner.GetOrderablePartitions.
+            Partitions the underlying collection into the given number of orderable partitions.
+            </summary>
+            <param name="partitionCount">number of partitions requested</param>
+            <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.GetOrderableDynamicPartitions">
+            <summary>
+            Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
+            </summary>
+            <returns>a enumerable collection of orderable partitions</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.SupportsDynamicPartitions">
+            <summary>
+            Whether additional partitions can be created dynamically.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.InternalPartitionEnumerable">
+            <summary>
+            Provides customized implementation for source data of IEnumerable
+            Different from the counterpart for IList/Array, this enumerable maintains several additional fields
+            shared by the partitions it owns, including a boolean "m_hasNoElementsLef", a shared lock, and a 
+            shared count "m_activePartitionCount"
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.InternalPartitionEnumerator">
+            <summary>
+            Inherits from DynamicPartitionEnumerator_Abstract directly
+            Provides customized implementation for: GrabNextChunk, HasNoElementsLeft, Current, Dispose
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.InternalPartitionEnumerator.GrabNextChunk(System.Int32)">
+            <summary>
+            Reserves a contiguous range of elements from source data
+            </summary>
+            <param name="requestedChunkSize">specified number of elements requested</param>
+            <returns>
+            true if we successfully reserved at least one element (up to #=requestedChunkSize) 
+            false if all elements in the source collection have been reserved.
+            </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.InternalPartitionEnumerator.Dispose">
+            <summary>
+            If the current partition is to be disposed, we decrement the number of active partitions
+            for the shared reader. 
+            If the number of active partitions becomes 0, we need to dispose the shared reader we created
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIEnumerable`1.InternalPartitionEnumerator.HasNoElementsLeft">
+            <summary>
+            Returns whether or not the shared reader has already read the last 
+            element of the source data 
+            </summary>
+            <remarks>
+            We cannot call m_sharedReader.MoveNext(), to see if it hits the last element
+            or not, because we can't undo MoveNext(). Thus we need to maintain a shared 
+            boolean value m_hasNoElementsLeft across all partitions
+            </remarks>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2">
+            <summary>
+            Dynamic load-balance partitioner. This class is abstract and to be derived from by 
+            the customized partitioner classes for IList, Array, and IEnumerable
+            </summary>
+            <typeparam name="TSource">Type of the elements in the source data</typeparam>
+            <typeparam name="TCollection"> Type of the source data collection</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2.#ctor(`1)">
+            <summary>
+            Constructs a new orderable partitioner 
+            </summary>
+            <param name="data">source data collection</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2.GetOrderableDynamicPartitions_Factory(`1)">
+            <summary>
+            Partition the source data and create an enumerable over the resulting partitions. 
+            </summary>
+            <param name="data">the source data collection</param>
+            <returns>an enumerable of partitions of </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2.GetOrderablePartitions(System.Int32)">
+            <summary>
+            Overrides OrderablePartitioner.GetOrderablePartitions.
+            Partitions the underlying collection into the given number of orderable partitions.
+            </summary>
+            <param name="partitionCount">number of partitions requested</param>
+            <returns>A list containing <paramref name="partitionCount"/> enumerators.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2.GetOrderableDynamicPartitions">
+            <summary>
+            Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
+            </summary>
+            <returns>a enumerable collection of orderable partitions</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIndexRange_Abstract`2.SupportsDynamicPartitions">
+            <summary>
+            Whether additional partitions can be created dynamically.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumeratorForIndexRange_Abstract`2">
+            <summary>
+            Defines dynamic partition for source data of IList and Array. 
+            This class inherits DynamicPartitionEnumerator_Abstract
+              - implements GrabNextChunk, HasNoElementsLeft, and Dispose methods for IList and Array
+              - Current property still remains abstract, implementation is different for IList and Array
+              - introduces another abstract method SourceCount, which returns the number of elements in
+                the source data. Implementation differs for IList and Array
+            </summary>
+            <typeparam name="TSource">Type of the elements in the data source</typeparam>
+            <typeparam name="TSourceReader">Type of the reader on the source data</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumeratorForIndexRange_Abstract`2.GrabNextChunk(System.Int32)">
+            <summary>
+            Reserves a contiguous range of elements from source data
+            </summary>
+            <param name="requestedChunkSize">specified number of elements requested</param>
+            <returns>
+            true if we successfully reserved at least one element (up to #=requestedChunkSize) 
+            false if all elements in the source collection have been reserved.
+            </returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumeratorForIndexRange_Abstract`2.Dispose">
+            <summary>
+            For source data type IList and Array, the type of the shared reader is just the data itself.
+            We don't do anything in Dispose method for IList and Array. 
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumeratorForIndexRange_Abstract`2.SourceCount">
+            <summary>
+            Get the number of elements from the source reader.
+            It calls IList.Count or Array.Length
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionEnumeratorForIndexRange_Abstract`2.HasNoElementsLeft">
+            <summary>
+            Returns whether or not the shared reader has already read the last 
+            element of the source data 
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIList`1">
+            <summary>
+            Inherits from DynamicPartitioners
+            Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
+            of EnumerableOfPartitionsForIList defined internally
+            </summary>
+            <typeparam name="TSource">Type of elements in the source data</typeparam>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIList`1.InternalPartitionEnumerable">
+            <summary>
+            Inherits from PartitionList_Abstract 
+            Provides customized implementation for source data of IList
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIList`1.InternalPartitionEnumerator">
+            <summary>
+            Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
+            Provides customized implementation of SourceCount property and Current property for IList
+            </summary>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.DynamicPartitionerForIList`1.InternalPartitionEnumerator.Current">
+            <summary>
+            return a KeyValuePair of the current element and its key 
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForArray`1">
+            <summary>
+            Inherits from DynamicPartitioners
+            Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
+            of EnumerableOfPartitionsForArray defined internally
+            </summary>
+            <typeparam name="TSource">Type of elements in the source data</typeparam>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForArray`1.InternalPartitionEnumerable">
+            <summary>
+            Inherits from PartitionList_Abstract 
+            Provides customized implementation for source data of Array
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.DynamicPartitionerForArray`1.InternalPartitionEnumerator">
+            <summary>
+            Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
+            Provides customized implementation of SourceCount property and Current property for Array
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitioner`2">
+            <summary>
+            Static partitioning over IList. 
+            - dynamic and load-balance
+            - Keys are ordered within each partition
+            - Keys are ordered across partitions
+            - Keys are normalized
+            - Number of partitions is fixed once specified, and the elements of the source data are 
+            distributed to each partition as evenly as possible. 
+            </summary>
+            <typeparam name="TSource">type of the elements</typeparam>        
+            <typeparam name="TCollection">Type of the source data collection</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitioner`2.CreatePartition(System.Int32,System.Int32)">
+            <summary>
+            Abstract method to create a partition that covers a range over source data, 
+            starting from "startIndex", ending at "endIndex"
+            </summary>
+            <param name="startIndex">start index of the current partition on the source data</param>
+            <param name="endIndex">end index of the current partition on the source data</param>
+            <returns>a partition enumerator over the specified range</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitioner`2.GetOrderablePartitions(System.Int32)">
+            <summary>
+            Overrides OrderablePartitioner.GetOrderablePartitions
+            Return a list of partitions, each of which enumerate a fixed part of the source data
+            The elements of the source data are distributed to each partition as evenly as possible. 
+            Specifically, if the total number of elements is N, and number of partitions is x, and N = a*x +b, 
+            where a is the quotient, and b is the remainder. Then the first b partitions each has a + 1 elements,
+            and the last x-b partitions each has a elements.
+            For example, if N=10, x =3, then 
+               partition 0 ranges [0,3],
+               partition 1 ranges [4,6],
+               partition 2 ranges [7,9].
+            This also takes care of the situation of (x&gt;N), the last x-N partitions are empty enumerators. 
+            An empty enumerator is indicated by 
+                 (m_startIndex == list.Count &amp;&amp; m_endIndex == list.Count -1)
+            </summary>
+            <param name="partitionCount">specified number of partitions</param>
+            <returns>a list of partitions</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitioner`2.SourceCount">
+            <summary>
+            Abstract method to return the number of elements in the source data
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartition`1">
+            <summary>
+            Static Partition for IList/Array.
+            This class implements all methods required by IEnumerator interface, except for the Current property.
+            Current Property is different for IList and Array. Arrays calls 'ldelem' instructions for faster element 
+            retrieval.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.StaticIndexRangePartition`1.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Constructs an instance of StaticIndexRangePartition
+            </summary>
+            <param name="startIndex">the start index in the source collection for the current partition </param>
+            <param name="endIndex">the end index in the source collection for the current partition</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.StaticIndexRangePartition`1.Dispose">
+            <summary>
+            We don't dispose the source for IList and array
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.Partitioner.StaticIndexRangePartition`1.MoveNext">
+            <summary>
+            Moves to the next item
+            Before the first MoveNext is called: m_offset == m_startIndex-1;
+            </summary>
+            <returns>true if successful, false if there is no item left</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.Partitioner.StaticIndexRangePartition`1.Current">
+            <summary>
+            Current Property is different for IList and Array. Arrays calls 'ldelem' instructions for faster 
+            element retrieval.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitionerForIList`1">
+            <summary>
+            Inherits from StaticIndexRangePartitioner
+            Provides customized implementation of SourceCount and CreatePartition
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitionForIList`1">
+            <summary>
+            Inherits from StaticIndexRangePartition
+            Provides customized implementation of Current property
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitionerForArray`1">
+            <summary>
+            Inherits from StaticIndexRangePartitioner
+            Provides customized implementation of SourceCount and CreatePartition for Array
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.StaticIndexRangePartitionForArray`1">
+            <summary>
+            Inherits from StaticIndexRangePartitioner
+            Provides customized implementation of SourceCount and CreatePartition
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.Partitioner.Shared`1">
+            <summary>
+            A very simple primitive that allows us to share a value across multiple threads.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.AggregateException">
+            <summary>Represents one or more errors that occur during application execution.</summary>
+            <remarks>
+            <see cref="T:System.AggregateException"/> is used to consolidate multiple failures into a single, throwable
+            exception object.
+            </remarks>
+        </member>
+        <member name="M:System.AggregateException.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class.
+            </summary>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with
+            a specified error message.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.String,System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with a specified error
+            message and a reference to the inner exception that is the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerException"/> argument
+            is null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.Collections.Generic.IEnumerable{System.Exception})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with
+            references to the inner exceptions that are the cause of this exception.
+            </summary>
+            <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+            is null.</exception>
+            <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.Exception[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with
+            references to the inner exceptions that are the cause of this exception.
+            </summary>
+            <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+            is null.</exception>
+            <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.String,System.Collections.Generic.IEnumerable{System.Exception})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with a specified error
+            message and references to the inner exceptions that are the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+            is null.</exception>
+            <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.String,System.Exception[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with a specified error
+            message and references to the inner exceptions that are the cause of this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+            is null.</exception>
+            <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.String,System.Collections.Generic.IList{System.Exception})">
+            <summary>
+            Allocates a new aggregate exception with the specified message and list of inner exceptions.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+            is null.</exception>
+            <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.AggregateException"/> class with serialized data.
+            </summary>
+            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds
+            the serialized object data about the exception being thrown.</param>
+            <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that
+            contains contextual information about the source or destination. </param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> argument is null.</exception>
+            <exception cref="T:System.Runtime.Serialization.SerializationException">The exception could not be deserialized correctly.</exception>
+        </member>
+        <member name="M:System.AggregateException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Sets the <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with information about
+            the exception.
+            </summary>
+            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds
+            the serialized object data about the exception being thrown.</param>
+            <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that
+            contains contextual information about the source or destination. </param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> argument is null.</exception>
+        </member>
+        <member name="M:System.AggregateException.GetBaseException">
+            <summary>
+            Returns the <see cref="T:System.AggregateException"/> that is the root cause of this exception.
+            </summary>
+        </member>
+        <member name="M:System.AggregateException.Handle(System.Func{System.Exception,System.Boolean})">
+            <summary>
+            Invokes a handler on each <see cref="T:System.Exception"/> contained by this <see cref="T:System.AggregateException"/>.
+            </summary>
+            <param name="predicate">The predicate to execute for each exception. The predicate accepts as an
+            argument the <see cref="T:System.Exception"/> to be processed and returns a Boolean to indicate
+            whether the exception was handled.</param>
+            <remarks>
+            Each invocation of the <paramref name="predicate"/> returns true or false to indicate whether the
+            <see cref="T:System.Exception"/> was handled. After all invocations, if any exceptions went
+            unhandled, all unhandled exceptions will be put into a new <see cref="T:System.AggregateException"/>
+            which will be thrown. Otherwise, the <see cref="M:System.AggregateException.Handle(System.Func{System.Exception,System.Boolean})"/> method simply returns. If any
+            invocations of the <paramref name="predicate"/> throws an exception, it will halt the processing
+            of any more exceptions and immediately propagate the thrown exception as-is.
+            </remarks>
+            <exception cref="T:System.AggregateException">An exception contained by this <see cref="T:System.AggregateException"/> was not handled.</exception>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="predicate"/> argument is
+            null.</exception>
+        </member>
+        <member name="M:System.AggregateException.Flatten">
+            <summary>
+            Flattens an <see cref="T:System.AggregateException"/> instances into a single, new instance.
+            </summary>
+            <returns>A new, flattened <see cref="T:System.AggregateException"/>.</returns>
+            <remarks>
+            If any inner exceptions are themselves instances of
+            <see cref="T:System.AggregateException"/>, this method will recursively flatten all of them. The
+            inner exceptions returned in the new <see cref="T:System.AggregateException"/>
+            will be the union of all of the the inner exceptions from exception tree rooted at the provided
+            <see cref="T:System.AggregateException"/> instance.
+            </remarks>
+        </member>
+        <member name="M:System.AggregateException.ToString">
+            <summary>
+            Creates and returns a string representation of the current <see cref="T:System.AggregateException"/>.
+            </summary>
+            <returns>A string representation of the current exception.</returns>
+        </member>
+        <member name="P:System.AggregateException.InnerExceptions">
+            <summary>
+            Gets a read-only collection of the <see cref="T:System.Exception"/> instances that caused the
+            current exception.
+            </summary>
+        </member>
+        <member name="T:System.Func_`6">
+            <summary>
+            Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter.
+            </summary>
+        </member>
+        <member name="T:System.Threading.CancellationToken">
+            <summary>
+            Propogates notification that operations should be canceled.
+            </summary>
+            <remarks>
+            <para>
+            A <see cref="T:System.Threading.CancellationToken"/> may be created directly in an unchangeable canceled or non-canceled state
+            using the CancellationToken's constructors. However, to have a CancellationToken that can change 
+            from a non-canceled to a canceled state, 
+            <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> must be used.
+            CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its 
+            <see cref="P:System.Threading.CancellationTokenSource.Token">Token</see> property. 
+            </para>
+            <para>
+            Once canceled, a token may not transition to a non-canceled state, and a token whose 
+            <see cref="P:System.Threading.CancellationToken.CanBeCanceled"/> is false will never change to one that can be canceled.
+            </para>
+            <para>
+            All members of this struct are thread-safe and may be used concurrently from multiple threads.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CancellationToken.#ctor(System.Threading.CancellationTokenSource)">
+            <summary>
+            Internal constructor only a CancellationTokenSource should create a CancellationToken
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationToken.#ctor(System.Boolean)">
+            <summary>
+            Initializes the <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            </summary>
+            <param name="canceled">
+            The canceled state for the token.
+            </param>
+            <remarks>
+            Tokens created with this constructor will remain in the canceled state specified
+            by the <paramref name="canceled"/> parameter.  If <paramref name="canceled"/> is false,
+            both <see cref="P:System.Threading.CancellationToken.CanBeCanceled"/> and <see cref="P:System.Threading.CancellationToken.IsCancellationRequested"/> will be false.
+            If <paramref name="canceled"/> is true,
+            both <see cref="P:System.Threading.CancellationToken.CanBeCanceled"/> and <see cref="P:System.Threading.CancellationToken.IsCancellationRequested"/> will be true. 
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Register(System.Action)">
+            <summary>
+            Registers a delegate that will be called when this <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.
+            </summary>
+            <remarks>
+            <para>
+            If this token is already in the canceled state, the
+            delegate will be run immediately and synchronously. Any exception the delegate generates will be
+            propogated out of this method call.
+            </para>
+            <para>
+            The current <see cref="T:System.Threading.ExecutionContext">ExecutionContext</see>, if one exists, will be captured
+            along with the delegate and will be used when executing it.
+            </para>
+            </remarks>
+            <param name="callback">The delegate to be executed when the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.</param>
+            <returns>The <see cref="T:System.Threading.CancellationTokenRegistration"/> instance that can 
+            be used to deregister the callback.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="callback"/> is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Register(System.Action,System.Boolean)">
+            <summary>
+            Registers a delegate that will be called when this 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.
+            </summary>
+            <remarks>
+            <para>
+            If this token is already in the canceled state, the
+            delegate will be run immediately and synchronously. Any exception the delegate generates will be
+            propogated out of this method call.
+            </para>
+            <para>
+            The current <see cref="T:System.Threading.ExecutionContext">ExecutionContext</see>, if one exists, will be captured
+            along with the delegate and will be used when executing it.
+            </para>
+            </remarks>
+            <param name="callback">The delegate to be executed when the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.</param>
+            <param name="useSynchronizationContext">A Boolean value that indicates whether to capture
+            the current <see cref="T:System.Threading.SynchronizationContext">SynchronizationContext</see> and use it
+            when invoking the <paramref name="callback"/>.</param>
+            <returns>The <see cref="T:System.Threading.CancellationTokenRegistration"/> instance that can 
+            be used to deregister the callback.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="callback"/> is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Register(System.Action{System.Object},System.Object)">
+            <summary>
+            Registers a delegate that will be called when this 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.
+            </summary>
+            <remarks>
+            <para>
+            If this token is already in the canceled state, the
+            delegate will be run immediately and synchronously. Any exception the delegate generates will be
+            propogated out of this method call.
+            </para>
+            <para>
+            The current <see cref="T:System.Threading.ExecutionContext">ExecutionContext</see>, if one exists, will be captured
+            along with the delegate and will be used when executing it.
+            </para>
+            </remarks>
+            <param name="callback">The delegate to be executed when the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.</param>
+            <param name="state">The state to pass to the <paramref name="callback"/> when the delegate is invoked.  This may be null.</param>
+            <returns>The <see cref="T:System.Threading.CancellationTokenRegistration"/> instance that can 
+            be used to deregister the callback.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="callback"/> is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Register(System.Action{System.Object},System.Object,System.Boolean)">
+            <summary>
+            Registers a delegate that will be called when this 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.
+            </summary>
+            <remarks>
+            <para>
+            If this token is already in the canceled state, the
+            delegate will be run immediately and synchronously. Any exception the delegate generates will be
+            propogated out of this method call.
+            </para>
+            <para>
+            The current <see cref="T:System.Threading.ExecutionContext">ExecutionContext</see>, if one exists, 
+            will be captured along with the delegate and will be used when executing it.
+            </para>
+            </remarks>
+            <param name="callback">The delegate to be executed when the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> is canceled.</param>
+            <param name="state">The state to pass to the <paramref name="callback"/> when the delegate is invoked.  This may be null.</param>
+            <param name="useSynchronizationContext">A Boolean value that indicates whether to capture
+            the current <see cref="T:System.Threading.SynchronizationContext">SynchronizationContext</see> and use it
+            when invoking the <paramref name="callback"/>.</param>
+            <returns>The <see cref="T:System.Threading.CancellationTokenRegistration"/> instance that can 
+            be used to deregister the callback.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="callback"/> is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Equals(System.Threading.CancellationToken)">
+            <summary>
+            Determines whether the current <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instance is equal to the 
+            specified token.
+            </summary>
+            <param name="other">The other <see cref="T:System.Threading.CancellationToken">CancellationToken</see> to which to compare this
+            instance.</param>
+            <returns>True if the instances are equal; otherwise, false. Two tokens are equal if they are associated
+            with the same <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> or if they were both constructed 
+            from public CancellationToken constructors and their <see cref="P:System.Threading.CancellationToken.IsCancellationRequested"/> values are equal.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationToken.Equals(System.Object)">
+            <summary>
+            Determines whether the current <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instance is equal to the 
+            specified <see cref="T:System.Object"/>.
+            </summary>
+            <param name="other">The other object to which to compare this instance.</param>
+            <returns>True if <paramref name="other"/> is a <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated
+            with the same <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> or if they were both constructed 
+            from public CancellationToken constructors and their <see cref="P:System.Threading.CancellationToken.IsCancellationRequested"/> values are equal.</returns>
+            <exception cref="T:System.ObjectDisposedException">An associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.GetHashCode">
+            <summary>
+            Serves as a hash function for a <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            </summary>
+            <returns>A hash code for the current <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instance.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationToken.op_Equality(System.Threading.CancellationToken,System.Threading.CancellationToken)">
+            <summary>
+            Determines whether two <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instances are equal.
+            </summary>
+            <param name="left">The first instance.</param>
+            <param name="right">The second instance.</param>
+            <returns>True if the instances are equal; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">An associated <see
+            cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.op_Inequality(System.Threading.CancellationToken,System.Threading.CancellationToken)">
+            <summary>
+            Determines whether two <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instances are not equal.
+            </summary>
+            <param name="left">The first instance.</param>
+            <param name="right">The second instance.</param>
+            <returns>True if the instances are not equal; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">An associated <see
+            cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationToken.ThrowIfCancellationRequested">
+            <summary>
+            Throws a <see cref="T:System.OperationCanceledException">OperationCanceledException</see> if
+            this token has had cancellation requested.
+            </summary>
+            <remarks>
+            This method provides functionality equivalent to:
+            <code>
+            if (token.IsCancellationRequested) 
+               throw new OperationCanceledException(token);
+            </code>
+            </remarks>
+            <exception cref="T:System.OperationCanceledException">The token has had cancellation requested.</exception>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="P:System.Threading.CancellationToken.None">
+            <summary>
+            Returns an empty CancellationToken value.
+            </summary>
+            <remarks>
+            The <see cref="T:System.Threading.CancellationToken"/> value returned by this property will be non-cancelable by default.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.CancellationToken.IsCancellationRequested">
+            <summary>
+            Gets whether cancellation has been requested for this token.
+            </summary>
+            <value>Whether cancellation has been requested for this token.</value>
+            <remarks>
+            <para>
+            This property indicates whether cancellation has been requested for this token, 
+            either through the token initially being construted in a canceled state, or through
+            calling <see cref="M:System.Threading.CancellationTokenSource.Cancel">Cancel</see> 
+            on the token's associated <see cref="T:System.Threading.CancellationTokenSource"/>.
+            </para>
+            <para>
+            If this property is true, it only guarantees that cancellation has been requested.  
+            It does not guarantee that every registered handler
+            has finished executing, nor that cancellation requests have finished propagating
+            to all registered handlers.  Additional synchronization may be required,
+            particularly in situations where related objects are being canceled concurrently.
+            </para>
+            </remarks>
+        </member>
+        <member name="P:System.Threading.CancellationToken.CanBeCanceled">
+            <summary>
+            Gets whether this token is capable of being in the canceled state.
+            </summary>
+            <remarks>
+            If CanBeCanceled returns false, it is guaranteed that the token will never transition
+            into a canceled state, meaning that <see cref="P:System.Threading.CancellationToken.IsCancellationRequested"/> will never
+            return true.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.CancellationToken.WaitHandle">
+            <summary>
+            Gets a <see cref="T:System.Threading.WaitHandle"/> that is signaled when the token is canceled.</summary>
+            <remarks>
+            Accessing this property causes a <see cref="T:System.Threading.WaitHandle">WaitHandle</see>
+            to be instantiated.  It is preferable to only use this property when necessary, and to then
+            dispose the associated <see cref="T:System.Threading.CancellationTokenSource"/> instance at the earliest opportunity (disposing
+            the source will dispose of this allocated handle).  The handle should not be closed or disposed directly.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The associated <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> has been disposed.</exception>
+        </member>
+        <member name="T:System.Threading.CancellationTokenRegistration">
+            <summary>
+            Represents a callback delegate that has been registered with a <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            </summary>
+            <remarks>
+            To unregister a callback, dispose the corresponding Registration instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.TryDeregister">
+            <summary>
+            Attempts to deregister the item. If it's already being run, this may fail.
+            Entails a full memory fence.
+            </summary>
+            <returns>True if the callback was found and deregistered, false otherwise.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.Dispose">
+            <summary>
+            Disposes of the registration and unregisters the target callback from the associated 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            If the target callback is currently executing this method will wait until it completes, except
+            in the degenerate cases where a callback method deregisters itself.
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.op_Equality(System.Threading.CancellationTokenRegistration,System.Threading.CancellationTokenRegistration)">
+            <summary>
+            Determines whether two <see
+            cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see>
+            instances are equal.
+            </summary>
+            <param name="left">The first instance.</param>
+            <param name="right">The second instance.</param>
+            <returns>True if the instances are equal; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.op_Inequality(System.Threading.CancellationTokenRegistration,System.Threading.CancellationTokenRegistration)">
+            <summary>
+            Determines whether two <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> instances are not equal.
+            </summary>
+            <param name="left">The first instance.</param>
+            <param name="right">The second instance.</param>
+            <returns>True if the instances are not equal; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.Equals(System.Object)">
+            <summary>
+            Determines whether the current <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> instance is equal to the 
+            specified <see cref="T:System.Object"/>.
+            </summary> 
+            <param name="obj">The other object to which to compare this instance.</param>
+            <returns>True, if both this and <paramref name="obj"/> are equal. False, otherwise.
+            Two <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> instances are equal if
+            they both refer to the output of a single call to the same Register method of a 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see>. 
+            </returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.Equals(System.Threading.CancellationTokenRegistration)">
+            <summary>
+            Determines whether the current <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instance is equal to the 
+            specified <see cref="T:System.Object"/>.
+            </summary> 
+            <param name="other">The other <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> to which to compare this instance.</param>
+            <returns>True, if both this and <paramref name="other"/> are equal. False, otherwise.
+            Two <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> instances are equal if
+            they both refer to the output of a single call to the same Register method of a 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see>. 
+            </returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenRegistration.GetHashCode">
+            <summary>
+            Serves as a hash function for a <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration.</see>.
+            </summary>
+            <returns>A hash code for the current <see cref="T:System.Threading.CancellationTokenRegistration">CancellationTokenRegistration</see> instance.</returns>
+        </member>
+        <member name="T:System.Threading.CancellationTokenSource">
+            <summary>
+            Signals to a <see cref="T:System.Threading.CancellationToken"/> that it should be canceled.
+            </summary>
+            <remarks>
+            <para>
+            <see cref="T:System.Threading.CancellationTokenSource"/> is used to instantiate a <see cref="T:System.Threading.CancellationToken"/>
+            (via the source's <see cref="P:System.Threading.CancellationTokenSource.Token">Token</see> property)
+            that can be handed to operations that wish to be notified of cancellation or that can be used to
+            register asynchronous operations for cancellation. That token may have cancellation requested by
+            calling to the source's <see cref="M:System.Threading.CancellationTokenSource.Cancel">Cancel</see>
+            method.
+            </para>
+            <para>
+            All members of this class, except <see cref="M:System.Threading.CancellationTokenSource.Dispose">Dispose</see>, are thread-safe and may be used
+            concurrently from multiple threads.
+            </para>
+            </remarks>
+        </member>
+        <member name="F:System.Threading.CancellationTokenSource.m_threadIDExecutingCallbacks">
+            The ID of the thread currently executing the main body of CTS.Cancel()
+            this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback.
+            This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to 
+            actually run the callbacks.
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.#ctor">
+            <summary>
+            Initializes the <see cref="T:System.Threading.CancellationTokenSource"/>.
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.Cancel">
+            <summary>
+            Communicates a request for cancellation.
+            </summary>
+            <remarks>
+            <para>
+            The associated <see cref="T:System.Threading.CancellationToken"/> will be
+            notified of the cancellation and will transition to a state where 
+            <see cref="P:System.Threading.CancellationToken.IsCancellationRequested">IsCancellationRequested</see> returns true. 
+            Any callbacks or cancelable operations
+            registered with the <see cref="T:System.Threading.CancellationToken"/>  will be executed.
+            </para>
+            <para>
+            Cancelable operations and callbacks registered with the token should not throw exceptions.
+            However, this overload of Cancel will aggregate any exceptions thrown into a <see cref="T:System.AggregateException"/>,
+            such that one callback throwing an exception will not prevent other registered callbacks from being executed.
+            </para>
+            <para>
+            The <see cref="T:System.Threading.ExecutionContext"/> that was captured when each callback was registered
+            will be reestablished when the callback is invoked.
+            </para>
+            </remarks>
+            <exception cref="T:System.AggregateException">An aggregate exception containing all the exceptions thrown
+            by the registered callbacks on the associated <see cref="T:System.Threading.CancellationToken"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">This <see cref="T:System.Threading.CancellationTokenSource"/> has been disposed.</exception> 
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.Cancel(System.Boolean)">
+            <summary>
+            Communicates a request for cancellation.
+            </summary>
+            <remarks>
+            <para>
+            The associated <see cref="T:System.Threading.CancellationToken"/> will be
+            notified of the cancellation and will transition to a state where 
+            <see cref="P:System.Threading.CancellationToken.IsCancellationRequested">IsCancellationRequested</see> returns true. 
+            Any callbacks or cancelable operations
+            registered with the <see cref="T:System.Threading.CancellationToken"/>  will be executed.
+            </para>
+            <para>
+            Cancelable operations and callbacks registered with the token should not throw exceptions. 
+            If <paramref name="throwOnFirstException"/> is true, an exception will immediately propagate out of the
+            call to Cancel, preventing the remaining callbacks and cancelable operations from being processed.
+            If <paramref name="throwOnFirstException"/> is false, this overload will aggregate any 
+            exceptions thrown into a <see cref="T:System.AggregateException"/>,
+            such that one callback throwing an exception will not prevent other registered callbacks from being executed.
+            </para>
+            <para>
+            The <see cref="T:System.Threading.ExecutionContext"/> that was captured when each callback was registered
+            will be reestablished when the callback is invoked.
+            </para>
+            </remarks>
+            <param name="throwOnFirstException">Specifies whether exceptions should immediately propagate.</param>
+            <exception cref="T:System.AggregateException">An aggregate exception containing all the exceptions thrown
+            by the registered callbacks on the associated <see cref="T:System.Threading.CancellationToken"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">This <see cref="T:System.Threading.CancellationTokenSource"/> has been disposed.</exception> 
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.Dispose">
+            <summary>
+            Releases the resources used by this <see cref="T:System.Threading.CancellationTokenSource" />.
+            </summary>
+            <remarks>
+            This method is not thread-safe for any other concurrent calls.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.ThrowIfDisposed">
+            <summary>
+            Throws an exception if the source has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.InternalGetStaticSource(System.Boolean)">
+            <summary>
+            InternalGetStaticSource()
+            </summary>
+            <param name="set">Whether the source should be set.</param>
+            <returns>A static source to be shared among multiple tokens.</returns>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.InternalRegister(System.Action{System.Object},System.Object,System.Threading.SynchronizationContext,System.Threading.ExecutionContext)">
+            <summary>
+            Registers a callback object. If cancellation has already occurred, the
+            callback will have been run by the time this method returns.
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.NotifyCancellation(System.Boolean)">
+            <summary>
+            
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.ExecuteCallbackHandlers(System.Boolean)">
+            <summary>
+            Invoke the Canceled event.
+            </summary>
+            <remarks>
+            The handlers are invoked synchronously in LIFO order.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.CreateLinkedTokenSource(System.Threading.CancellationToken,System.Threading.CancellationToken)">
+            <summary>
+            Creates a <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that will be in the canceled state
+            when any of the source tokens are in the canceled state.
+            </summary>
+            <param name="token1">The first <see cref="T:System.Threading.CancellationToken">CancellationToken</see> to observe.</param>
+            <param name="token2">The second <see cref="T:System.Threading.CancellationToken">CancellationToken</see> to observe.</param>
+            <returns>A <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that is linked 
+            to the source tokens.</returns>
+            <exception cref="T:System.ObjectDisposedException">A <see
+            cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with
+            one of the source tokens has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CancellationTokenSource.CreateLinkedTokenSource(System.Threading.CancellationToken[])">
+            <summary>
+            Creates a <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that will be in the canceled state
+            when any of the source tokens are in the canceled state.
+            </summary>
+            <param name="tokens">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> instances to observe.</param>
+            <returns>A <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> that is linked 
+            to the source tokens.</returns>
+            <exception cref="T:System.ArgumentNullException"><paramref name="tokens"/> is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">A <see
+            cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with
+            one of the source tokens has been disposed.</exception>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.IsCancellationRequested">
+            <summary>
+            Gets whether cancellation has been requested for this <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see>.
+            </summary>
+            <value>Whether cancellation has been requested for this <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see>.</value>
+            <remarks>
+            <para>
+            This property indicates whether cancellation has been requested for this token source, such as
+            due to a call to its
+            <see cref="M:System.Threading.CancellationTokenSource.Cancel">Cancel</see> method.
+            </para>
+            <para>
+            If this property returns true, it only guarantees that cancellation has been requested. It does not
+            guarantee that every handler registered with the corresponding token has finished executing, nor
+            that cancellation requests have finished propagating to all registered handlers. Additional
+            synchronization may be required, particularly in situations where related objects are being
+            canceled concurrently.
+            </para>
+            </remarks>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.IsCancellationCompleted">
+            <summary>
+            A simple helper to determine whether cancellation has finished.
+            </summary>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.IsDisposed">
+            <summary>
+            A simple helper to determine whether disposal has occured.
+            </summary>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.ThreadIDExecutingCallbacks">
+            <summary>
+            The ID of the thread that is running callbacks.
+            </summary>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.Token">
+            <summary>
+            Gets the <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            associated with this <see cref="T:System.Threading.CancellationTokenSource"/>.
+            </summary>
+            <value>The <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            associated with this <see cref="T:System.Threading.CancellationTokenSource"/>.</value>
+            <exception cref="T:System.ObjectDisposedException">The token source has been
+            disposed.</exception>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.CanBeCanceled">
+             <summary>
+            
+             </summary>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.WaitHandle">
+             <summary>
+            
+             </summary>
+        </member>
+        <member name="P:System.Threading.CancellationTokenSource.ExecutingCallback">
+            <summary>
+            The currently executing callback
+            </summary>
+        </member>
+        <member name="T:System.Threading.CancellationCallbackInfo">
+            <summary>
+            A helper class for collating the various bits of information required to execute 
+            cancellation callbacks.
+            </summary>
+        </member>
+        <member name="M:System.Threading.CancellationCallbackInfo.ExecuteCallback">
+            <summary>
+            InternalExecuteCallbackSynchronously_GeneralPath
+            This will be called on the target synchronization context, however, we still need to restore the required execution context
+            </summary>
+        </member>
+        <member name="T:System.Threading.SparselyPopulatedArray`1">
+            <summary>
+            A sparsely populated array.  Elements can be sparse and some null, but this allows for
+            lock-free additions and growth, and also for constant time removal (by nulling out).
+            </summary>
+            <typeparam name="T">The kind of elements contained within.</typeparam>
+        </member>
+        <member name="M:System.Threading.SparselyPopulatedArray`1.#ctor(System.Int32)">
+            <summary>
+            Allocates a new array with the given initial size.
+            </summary>
+            <param name="initialSize">How many array slots to pre-allocate.</param>
+        </member>
+        <member name="M:System.Threading.SparselyPopulatedArray`1.Add(`0)">
+            <summary>
+            Adds an element in the first available slot, beginning the search from the tail-to-head.
+            If no slots are available, the array is grown.  The method doesn't return until successful.
+            </summary>
+            <param name="element">The element to add.</param>
+            <returns>Information about where the add happened, to enable O(1) deregistration.</returns>
+        </member>
+        <member name="P:System.Threading.SparselyPopulatedArray`1.Head">
+            <summary>
+            The head of the doubly linked list.
+            </summary>
+        </member>
+        <member name="P:System.Threading.SparselyPopulatedArray`1.Tail">
+            <summary>
+            The tail of the doubly linked list.
+            </summary>
+        </member>
+        <member name="T:System.Threading.SparselyPopulatedArrayAddInfo`1">
+            <summary>
+            A struct to hold a link to the exact spot in an array an element was inserted, enabling
+            constant time removal later on.
+            </summary>
+        </member>
+        <member name="T:System.Threading.SparselyPopulatedArrayFragment`1">
+            <summary>
+            A fragment of a sparsely populated array, doubly linked.
+            </summary>
+            <typeparam name="T">The kind of elements contained within.</typeparam>
+        </member>
+        <member name="T:System.Threading.CountdownEvent">
+            <summary>
+            Represents a synchronization primitive that is signaled when its count reaches zero.
+            </summary>
+            <remarks>
+            All public and protected members of <see cref="T:System.Threading.CountdownEvent"/> are thread-safe and may be used
+            concurrently from multiple threads, with the exception of Dispose, which
+            must only be used when all other operations on the <see cref="T:System.Threading.CountdownEvent"/> have
+            completed, and Reset, which should only be used when no other threads are
+            accessing the event.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of <see cref="T:System.Threading.CountdownEvent"/> class with the
+            specified count.
+            </summary>
+            <param name="initialCount">The number of signals required to set the <see
+            cref="T:System.Threading.CountdownEvent"/>.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="initialCount"/> is less
+            than 0.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Dispose">
+            <summary>
+            Releases all resources used by the current instance of <see cref="T:System.Threading.CountdownEvent"/>.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.CountdownEvent"/>, <see cref="M:System.Threading.CountdownEvent.Dispose"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Dispose(System.Boolean)">
+            <summary>
+            When overridden in a derived class, releases the unmanaged resources used by the
+            <see cref="T:System.Threading.CountdownEvent"/>, and optionally releases the managed resources.
+            </summary>
+            <param name="disposing">true to release both managed and unmanaged resources; false to release
+            only unmanaged resources.</param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.CountdownEvent"/>, <see cref="M:System.Threading.CountdownEvent.Dispose"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Signal">
+            <summary>
+            Registers a signal with the <see cref="T:System.Threading.CountdownEvent"/>, decrementing its
+            count.
+            </summary>
+            <returns>true if the signal caused the count to reach zero and the event was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.InvalidOperationException">The current instance is already set.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Signal(System.Int32)">
+            <summary>
+            Registers multiple signals with the <see cref="T:System.Threading.CountdownEvent"/>,
+            decrementing its count by the specified amount.
+            </summary>
+            <param name="signalCount">The number of signals to register.</param>
+            <returns>true if the signals caused the count to reach zero and the event was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.InvalidOperationException">
+            The current instance is already set. -or- Or <paramref name="signalCount"/> is greater than <see cref="P:System.Threading.CountdownEvent.CurrentCount"/>.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="signalCount"/> is less
+            than 1.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.AddCount">
+            <summary>
+            Increments the <see cref="T:System.Threading.CountdownEvent"/>'s current count by one.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">The current instance is already
+            set.</exception>
+            <exception cref="T:System.InvalidOperationException"><see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is equal to <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The current instance has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.TryAddCount">
+            <summary>
+            Attempts to increment the <see cref="T:System.Threading.CountdownEvent"/>'s current count by one.
+            </summary>
+            <returns>true if the increment succeeded; otherwise, false. If <see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is
+            already at zero. this will return false.</returns>
+            <exception cref="T:System.InvalidOperationException"><see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is equal to <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.AddCount(System.Int32)">
+            <summary>
+            Increments the <see cref="T:System.Threading.CountdownEvent"/>'s current count by a specified
+            value.
+            </summary>
+            <param name="signalCount">The value by which to increase <see cref="P:System.Threading.CountdownEvent.CurrentCount"/>.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="signalCount"/> is less than
+            0.</exception>
+            <exception cref="T:System.InvalidOperationException">The current instance is already
+            set.</exception>
+            <exception cref="T:System.InvalidOperationException"><see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is equal to <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.TryAddCount(System.Int32)">
+            <summary>
+            Attempts to increment the <see cref="T:System.Threading.CountdownEvent"/>'s current count by a
+            specified value.
+            </summary>
+            <param name="signalCount">The value by which to increase <see cref="P:System.Threading.CountdownEvent.CurrentCount"/>.</param>
+            <returns>true if the increment succeeded; otherwise, false. If <see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is
+            already at zero this will return false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="signalCount"/> is less
+            than 0.</exception>
+            <exception cref="T:System.InvalidOperationException">The current instance is already
+            set.</exception>
+            <exception cref="T:System.InvalidOperationException"><see cref="P:System.Threading.CountdownEvent.CurrentCount"/> is equal to <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Reset">
+            <summary>
+            Resets the <see cref="P:System.Threading.CountdownEvent.CurrentCount"/> to the value of <see cref="P:System.Threading.CountdownEvent.InitialCount"/>.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.CountdownEvent"/>, Reset is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed..</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Reset(System.Int32)">
+            <summary>
+            Resets the <see cref="P:System.Threading.CountdownEvent.CurrentCount"/> to a specified value.
+            </summary>
+            <param name="count">The number of signals required to set the <see cref="T:System.Threading.CountdownEvent"/>.</param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.CountdownEvent"/>, Reset is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is
+            less than 0.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has alread been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set.
+            </summary>
+            <remarks>
+            The caller of this method blocks indefinitely until the current instance is set. The caller will
+            return immediately if the event is currently in a set state.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait(System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set, while
+            observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <remarks>
+            The caller of this method blocks indefinitely until the current instance is set. The caller will
+            return immediately if the event is currently in a set state.  If the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> being observed
+            is canceled during the wait operation, an <see cref="T:System.OperationCanceledException"/>
+            will be thrown.
+            </remarks>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has been
+            canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait(System.TimeSpan)">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set, using a
+            <see cref="T:System.TimeSpan"/> to measure the time interval.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of
+            milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to
+            wait indefinitely.</param>
+            <returns>true if the <see cref="T:System.Threading.CountdownEvent"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait(System.TimeSpan,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set, using
+            a <see cref="T:System.TimeSpan"/> to measure the time interval, while observing a
+            <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of
+            milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to
+            wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if the <see cref="T:System.Threading.CountdownEvent"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has
+            been canceled.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait(System.Int32)">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set, using a
+            32-bit signed integer to measure the time interval.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <returns>true if the <see cref="T:System.Threading.CountdownEvent"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.Wait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the <see cref="T:System.Threading.CountdownEvent"/> is set, using a
+            32-bit signed integer to measure the time interval, while observing a
+            <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if the <see cref="T:System.Threading.CountdownEvent"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has
+            been canceled.</exception>
+        </member>
+        <member name="M:System.Threading.CountdownEvent.ThrowIfDisposed">
+            <summary>
+            Throws an exception if the latch has been disposed.
+            </summary>
+        </member>
+        <member name="P:System.Threading.CountdownEvent.CurrentCount">
+            <summary>
+            Gets the number of remaining signals required to set the event.
+            </summary>
+            <value>
+            The number of remaining signals required to set the event.
+            </value>
+        </member>
+        <member name="P:System.Threading.CountdownEvent.InitialCount">
+            <summary>
+            Gets the numbers of signals initially required to set the event.
+            </summary>
+            <value>
+            The number of signals initially required to set the event.
+            </value>
+        </member>
+        <member name="P:System.Threading.CountdownEvent.IsSet">
+            <summary>
+            Determines whether the event is set.
+            </summary>
+            <value>true if the event is set; otherwise, false.</value>
+        </member>
+        <member name="P:System.Threading.CountdownEvent.WaitHandle">
+            <summary>
+            Gets a <see cref="T:System.Threading.WaitHandle"/> that is used to wait for the event to be set. 
+            </summary>
+            <value>A <see cref="T:System.Threading.WaitHandle"/> that is used to wait for the event to be set.</value>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been disposed.</exception>
+            <remarks>
+            <see cref="P:System.Threading.CountdownEvent.WaitHandle"/> should only be used if it's needed for integration with code bases
+            that rely on having a WaitHandle.  If all that's needed is to wait for the <see cref="T:System.Threading.CountdownEvent"/>
+            to be set, the <see cref="M:System.Threading.CountdownEvent.Wait"/> method should be preferred.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.ManualResetEventSlim">
+            <summary>
+            Provides a slimmed down version of <see cref="T:System.Threading.ManualResetEvent"/>.
+            </summary>
+            <remarks>
+            All public and protected members of <see cref="T:System.Threading.ManualResetEventSlim"/> are thread-safe and may be used
+            concurrently from multiple threads, with the exception of Dispose, which
+            must only be used when all other operations on the <see cref="T:System.Threading.ManualResetEventSlim"/> have
+            completed, and Reset, which should only be used when no other threads are
+            accessing the event.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.ManualResetEventSlim"/>
+            class with an initial state of nonsignaled.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.#ctor(System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.ManualResetEventSlim"/>
+            class with a Boolen value indicating whether to set the intial state to signaled.
+            </summary>
+            <param name="initialState">true to set the initial state signaled; false to set the initial state
+            to nonsignaled.</param>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.#ctor(System.Boolean,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.ManualResetEventSlim"/>
+            class with a Boolen value indicating whether to set the intial state to signaled and a specified
+            spin count.
+            </summary>
+            <param name="initialState">true to set the initial state to signaled; false to set the initial state
+            to nonsignaled.</param>
+            <param name="spinCount">The number of spin waits that will occur before falling back to a true
+            wait.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="spinCount"/> is less than
+            0 or greater than the maximum allowed value.</exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Initialize(System.Boolean,System.Int32)">
+            <summary>
+            Initializes the internal state of the event.
+            </summary>
+            <param name="initialState">Whether the event is set initially or not.</param>
+            <param name="spinCount">The spin count that decides when the event will block.</param>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.EnsureLockObjectCreated">
+            <summary>
+            Helper to ensure the lock object is created before first use.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.LazyInitializeEvent">
+            <summary>
+            This method lazily initializes the event object. It uses CAS to guarantee that
+            many threads racing to call this at once don't result in more than one event
+            being stored and used. The event will be signaled or unsignaled depending on
+            the state of the thin-event itself, with synchronization taken into account.
+            </summary>
+            <returns>True if a new event was created and stored, false otherwise.</returns>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Set">
+            <summary>
+            Sets the state of the event to signaled, which allows one or more threads waiting on the event to
+            proceed.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Set(System.Boolean)">
+            <summary>
+            Private helper to actually perform the Set.
+            </summary>
+            <param name="duringCancellation">Indicates whether we are calling Set() during cancellation.</param>
+            <exception cref="T:System.OperationCanceledException">The object has been canceled.</exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Reset">
+            <summary>
+            Sets the state of the event to nonsignaled, which causes threads to block.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.ManualResetEventSlim"/>, <see cref="M:System.Threading.ManualResetEventSlim.Reset"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> is set.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+            <remarks>
+            The caller of this method blocks indefinitely until the current instance is set. The caller will
+            return immediately if the event is currently in a set state.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait(System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> receives a signal,
+            while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+            <exception cref="T:System.OperationCanceledExcepton"><paramref name="cancellationToken"/> was
+            canceled.</exception>
+            <remarks>
+            The caller of this method blocks indefinitely until the current instance is set. The caller will
+            return immediately if the event is currently in a set state.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait(System.TimeSpan)">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> is set, using a
+            <see cref="T:System.TimeSpan"/> to measure the time interval.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>true if the <see cref="T:System.Threading.ManualResetEventSlim"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait(System.TimeSpan,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> is set, using a
+            <see cref="T:System.TimeSpan"/> to measure the time interval, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if the <see cref="T:System.Threading.ManualResetEventSlim"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.Threading.OperationCanceledException"><paramref name="cancellationToken"/> was canceled.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait(System.Int32)">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> is set, using a
+            32-bit signed integer to measure the time interval.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <returns>true if the <see cref="T:System.Threading.ManualResetEventSlim"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Wait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until the current <see cref="T:System.Threading.ManualResetEventSlim"/> is set, using a
+            32-bit signed integer to measure the time interval, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if the <see cref="T:System.Threading.ManualResetEventSlim"/> was set; otherwise,
+            false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The maximum number of waiters has been exceeded.
+            </exception>
+            <exception cref="T:System.Threading.OperationCanceledException"><paramref name="cancellationToken"/> was canceled.</exception>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Dispose">
+            <summary>
+            Releases all resources used by the current instance of <see cref="T:System.Threading.ManualResetEventSlim"/>.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.ManualResetEventSlim"/>, <see cref="M:System.Threading.ManualResetEventSlim.Dispose"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.Dispose(System.Boolean)">
+            <summary>
+            When overridden in a derived class, releases the unmanaged resources used by the 
+            <see cref="T:System.Threading.ManualResetEventSlim"/>, and optionally releases the managed resources.
+            </summary>
+            <param name="disposing">true to release both managed and unmanaged resources;
+            false to release only unmanaged resources.</param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.ManualResetEventSlim"/>, <see cref="M:System.Threading.ManualResetEventSlim.Dispose(System.Boolean)"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.ThrowIfDisposed">
+            <summary>
+            Throw ObjectDisposedException if the MRES is disposed
+            </summary>
+        </member>
+        <member name="F:System.Threading.ManualResetEventSlim.s_cancellationTokenCallback">
+            <summary>
+            Private helper method to wake up waiters when a cancellationToken gets canceled.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.UpdateStateAtomically(System.Int32,System.Int32)">
+            <summary>
+            Private helper method for updating parts of a bit-string state value.
+            Mainly called from the IsSet and Waiters properties setters
+            </summary>
+            <remarks>
+            Note: the parameter types must be int as CompareExchange cannot take a Uint
+            </remarks>
+            <param name="newBits">The new value</param>
+            <param name="updateBitsMask">The mask used to set the bits</param>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.ExtractStatePortionAndShiftRight(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word.
+            eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer 
+            
+            ?? is there a common place to put this rather than being private to MRES?
+            </summary>
+            <param name="state"></param>
+            <param name="mask"></param>
+            <param name="rightBitShiftCount"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.ExtractStatePortion(System.Int32,System.Int32)">
+            <summary>
+            Performs a Mask operation, but does not perform the shift.
+            This is acceptable for boolean values for which the shift is unnecessary
+            eg (val &amp; Mask) != 0 is an appropriate way to extract a boolean rather than using
+            ((val &amp; Mask) &gt;&gt; shiftAmount) == 1
+            
+            ?? is there a common place to put this rather than being private to MRES?
+            </summary>
+            <param name="state"></param>
+            <param name="mask"></param>
+        </member>
+        <member name="M:System.Threading.ManualResetEventSlim.UpdateTimeOut(System.Int64,System.Int32)">
+            <summary>
+            Helper function to measure and update the wait time
+            </summary>
+            <param name="startTimeTicks"> The first time (in Ticks) observed when the wait started.</param>
+            <param name="originalWaitMillisecondsTimeout">The orginal wait timeoutout in milliseconds.</param>
+            <returns>The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters
+            has occurred.</returns>
+        </member>
+        <member name="P:System.Threading.ManualResetEventSlim.WaitHandle">
+            <summary>
+            Gets the underlying <see cref="T:System.Threading.WaitHandle"/> object for this <see cref="T:System.Threading.ManualResetEventSlim"/>.
+            </summary>
+            <value>The underlying <see cref="T:System.Threading.WaitHandle"/> event object fore this <see cref="T:System.Threading.ManualResetEventSlim"/>.</value>
+            <remarks>
+            Accessing this property forces initialization of an underlying event object if one hasn't
+            already been created.  To simply wait on this <see cref="T:System.Threading.ManualResetEventSlim"/>, 
+            the public Wait methods should be preferred.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.ManualResetEventSlim.IsSet">
+            <summary>
+            Gets whether the event is set.
+            </summary>
+            <value>true if the event has is set; otherwise, false.</value>
+        </member>
+        <member name="P:System.Threading.ManualResetEventSlim.SpinCount">
+            <summary>
+            Gets the number of spin waits that will be occur before falling back to a true wait.
+            </summary>
+        </member>
+        <member name="P:System.Threading.ManualResetEventSlim.Waiters">
+            <summary>
+            How many threads are waiting.
+            </summary>
+        </member>
+        <member name="T:System.Lazy`1">
+            <summary>
+            Provides support for lazy initialization.
+            </summary>
+            <typeparam name="T">Specifies the type of element being laziliy initialized.</typeparam>
+            <remarks>
+            <para>
+            By default, all public and protected members of <see cref="T:System.Lazy`1"/> are thread-safe and may be used
+            concurrently from multiple threads.  These thread-safety guarantees may be removed optionally and per instance
+            using parameters to the type's constructors.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Lazy`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/> class that 
+            uses <typeparamref name="T"/>'s default constructor for lazy initialization.
+            </summary>
+            <remarks>
+            An instance created with this constructor may be used concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="M:System.Lazy`1.#ctor(System.Func{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/> class that uses a
+            specified initialization function.
+            </summary>
+            <param name="valueFactory">
+            The <see cref="T:System.Func{T}"/> invoked to produce the lazily-initialized value when it is
+            needed.
+            </param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="valueFactory"/> is a null
+            reference (Nothing in Visual Basic).</exception>
+            <remarks>
+            An instance created with this constructor may be used concurrently from multiple threads.
+            </remarks>
+        </member>
+        <member name="M:System.Lazy`1.#ctor(System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/>
+            class that uses <typeparamref name="T"/>'s default constructor and a specified thread-safety mode.
+            </summary>
+            <param name="isThreadSafe">true if this instance should be usable by multiple threads concurrently; false if the instance will only be used by one thread at a time.
+            </param>
+        </member>
+        <member name="M:System.Lazy`1.#ctor(System.Threading.LazyThreadSafetyMode)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/>
+            class that uses <typeparamref name="T"/>'s default constructor and a specified thread-safety mode.
+            </summary>
+            <param name="mode">The lazy thread-safety mode mode</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="mode"/> mode contains an invalid valuee</exception>
+        </member>
+        <member name="M:System.Lazy`1.#ctor(System.Func{`0},System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/> class
+            that uses a specified initialization function and a specified thread-safety mode.
+            </summary>
+            <param name="valueFactory">
+            The <see cref="T:System.Func{T}"/> invoked to produce the lazily-initialized value when it is needed.
+            </param>
+            <param name="isThreadSafe">true if this instance should be usable by multiple threads concurrently; false if the instance will only be used by one thread at a time.
+            </param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="valueFactory"/> is
+            a null reference (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Lazy`1.#ctor(System.Func{`0},System.Threading.LazyThreadSafetyMode)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Lazy{T}"/> class
+            that uses a specified initialization function and a specified thread-safety mode.
+            </summary>
+            <param name="valueFactory">
+            The <see cref="T:System.Func{T}"/> invoked to produce the lazily-initialized value when it is needed.
+            </param>
+            <param name="mode">The lazy thread-safety mode.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="valueFactory"/> is
+            a null reference (Nothing in Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="mode"/> mode contains an invalid value.</exception>
+        </member>
+        <member name="M:System.Lazy`1.GetObjectFromMode(System.Threading.LazyThreadSafetyMode)">
+            <summary>
+            Static helper function that returns an object based on the given mode. it also throws an exception if the mode is invalid
+            </summary>
+        </member>
+        <member name="M:System.Lazy`1.OnSerializing(System.Runtime.Serialization.StreamingContext)">
+            <summary>Forces initialization during serialization.</summary>
+            <param name="context">The StreamingContext for the serialization operation.</param>
+        </member>
+        <member name="M:System.Lazy`1.ToString">
+            <summary>Creates and returns a string representation of this instance.</summary>
+            <returns>The result of calling <see cref="M:System.Object.ToString"/> on the <see cref="P:System.Lazy`1.Value"/>.</returns>
+            <exception cref="T:System.NullReferenceException">
+            The <see cref="P:System.Lazy`1.Value"/> is null.
+            </exception>
+        </member>
+        <member name="M:System.Lazy`1.LazyInitValue">
+            <summary>
+            local helper method to initialize the value 
+            </summary>
+            <returns>The inititialized T value</returns>
+        </member>
+        <member name="M:System.Lazy`1.CreateValue">
+            <summary>Creates an instance of T using m_valueFactory in case its not null or use reflection to create a new T()</summary>
+            <returns>An instance of Boxed.</returns>
+        </member>
+        <member name="P:System.Lazy`1.ValueForDebugDisplay">
+            <summary>Gets the value of the Lazy&lt;T&gt; for debugging display purposes.</summary>
+        </member>
+        <member name="P:System.Lazy`1.Mode">
+            <summary>
+            Gets a value indicating whether this instance may be used concurrently from multiple threads.
+            </summary>
+        </member>
+        <member name="P:System.Lazy`1.IsValueFaulted">
+            <summary>
+            Gets whether the value creation is faulted or not
+            </summary>
+        </member>
+        <member name="P:System.Lazy`1.IsValueCreated">
+            <summary>Gets a value indicating whether the <see cref="T:System.Lazy{T}"/> has been initialized.
+            </summary>
+            <value>true if the <see cref="T:System.Lazy{T}"/> instance has been initialized;
+            otherwise, false.</value>
+            <remarks>
+            The initialization of a <see cref="T:System.Lazy{T}"/> instance may result in either
+            a value being produced or an exception being thrown.  If an exception goes unhandled during initialization, 
+            <see cref="P:System.Lazy`1.IsValueCreated"/> will return false.
+            </remarks>
+        </member>
+        <!-- Badly formed XML comment ignored for member "P:System.Lazy`1.Value" -->
+        <member name="T:System.Lazy`1.Boxed">
+            <summary>
+            wrapper class to box the initialized value, this is mainly created to avoid boxing/unboxing the value each time the value is called in case T is 
+            a value type
+            </summary>
+        </member>
+        <member name="T:System.Lazy`1.LazyInternalExceptionHolder">
+            <summary>
+            Wrapper class to wrap the excpetion thrown by the value factory
+            </summary>
+        </member>
+        <member name="T:System.System_LazyDebugView`1">
+            <summary>A debugger view of the Lazy&lt;T&gt; to surface additional debugging properties and 
+            to ensure that the Lazy&lt;T&gt; does not become initialized if it was not already.</summary>
+        </member>
+        <member name="M:System.System_LazyDebugView`1.#ctor(System.Lazy{`0})">
+            <summary>Constructs a new debugger view object for the provided Lazy object.</summary>
+            <param name="lazy">A Lazy object to browse in the debugger.</param>
+        </member>
+        <member name="P:System.System_LazyDebugView`1.IsValueCreated">
+            <summary>Returns whether the Lazy object is initialized or not.</summary>
+        </member>
+        <member name="P:System.System_LazyDebugView`1.Value">
+            <summary>Returns the value of the Lazy object.</summary>
+        </member>
+        <member name="P:System.System_LazyDebugView`1.Mode">
+            <summary>Returns the execution mode of the Lazy object</summary>
+        </member>
+        <member name="P:System.System_LazyDebugView`1.IsValueFaulted">
+            <summary>Returns the execution mode of the Lazy object</summary>
+        </member>
+        <member name="T:System.Threading.LazyThreadSafetyMode">
+            <summary>
+            Specifies how a <see cref="T:System.Threading.Lazy{T}"/> instance should synchronize access among multiple threads.
+            </summary>
+        </member>
+        <member name="F:System.Threading.LazyThreadSafetyMode.None">
+            <summary>
+            This mode makes no guarantees around the thread-safety of the <see cref="T:System.Threading.Lazy{T}"/> instance.  If used from multiple threads, the behavior of the <see cref="T:System.Threading.Lazy{T}"/> is undefined.
+            This mode should be used when a <see cref="T:System.Threading.Lazy{T}"/> is guaranteed to never be initialized from more than one thread simultaneously and high performance is crucial. 
+            If valueFactory throws an exception when the <see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on subsequent accesses to Value. Also, if valueFactory recursively
+            accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a <see cref="T:System.InvalidOperationException"/> will be thrown.
+            </summary>
+        </member>
+        <member name="F:System.Threading.LazyThreadSafetyMode.PublicationOnly">
+            <summary>
+            When multiple threads attempt to simultaneously initialize a <see cref="T:System.Threading.Lazy{T}"/> instance, this mode allows each thread to execute the
+            valueFactory but only the first thread to complete initialization will be allowed to set the final value of the  <see cref="T:System.Threading.Lazy{T}"/>.
+            Once initialized successfully, any future calls to Value will return the cached result.  If valueFactory throws an exception on any thread, that exception will be
+            propagated out of Value. If any thread executes valueFactory without throwing an exception and, therefore, successfully sets the value, that value will be returned on
+            subsequent accesses to Value from any thread.  If no thread succeeds in setting the value, IsValueCreated will remain false and subsequent accesses to Value will result in
+            the valueFactory delegate re-executing.  Also, if valueFactory recursively accesses Value on this  <see cref="T:System.Threading.Lazy{T}"/> instance, an exception will NOT be thrown.
+            </summary>
+        </member>
+        <member name="F:System.Threading.LazyThreadSafetyMode.ExecutionAndPublication">
+            <summary>
+            This mode uses locks to ensure that only a single thread can initialize a <see cref="T:System.Threading.Lazy{T}"/> instance in a thread-safe manner.  In general,
+            taken if this mode is used in conjunction with a <see cref="T:System.Threading.Lazy{T}"/> valueFactory delegate that uses locks internally, a deadlock can occur if not
+            handled carefully.  If valueFactory throws an exception when the<see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on
+            subsequent accesses to Value. Also, if valueFactory recursively accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a  <see cref="T:System.InvalidOperationException"/> will be thrown.
+            </summary>
+        </member>
+        <member name="T:System.Threading.LazyInitializer">
+            <summary>
+            Provides lazy initialization routines.
+            </summary>
+            <remarks>
+            These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using
+            references to ensure targets have been initialized as they are accessed.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitialized``1(``0@)">
+            <summary>
+            Initializes a target reference type with the type's default constructor if the target has not
+            already been initialized.
+            </summary>
+            <typeparam name="T">The refence type of the reference to be initialized.</typeparam>
+            <param name="target">A reference of type <typeparamref name="T"/> to initialize if it has not
+            already been initialized.</param>
+            <returns>The initialized reference of type <typeparamref name="T"/>.</returns>
+            <exception cref="T:System.MissingMemberException">Type <typeparamref name="T"/> does not have a default
+            constructor.</exception>
+            <exception cref="T:System.MemberAccessException">
+            Permissions to access the constructor of type <typeparamref name="T"/> were missing.
+            </exception>
+            <remarks>
+            <para>
+            This method may only be used on reference types. To ensure initialization of value
+            types, see other overloads of EnsureInitialized.
+            </para>
+            <para>
+            This method may be used concurrently by multiple threads to initialize <paramref name="target"/>.  
+            In the event that multiple threads access this method concurrently, multiple instances of <typeparamref name="T"/>
+            may be created, but only one will be stored into <paramref name="target"/>. In such an occurrence, this method will not dispose of the
+            objects that were not stored.  If such objects must be disposed, it is up to the caller to determine 
+            if an object was not used and to then dispose of the object appropriately.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitialized``1(``0@,System.Func{``0})">
+            <summary>
+            Initializes a target reference type using the specified function if it has not already been
+            initialized.
+            </summary>
+            <typeparam name="T">The reference type of the reference to be initialized.</typeparam>
+            <param name="target">The reference of type <typeparamref name="T"/> to initialize if it has not
+            already been initialized.</param>
+            <param name="valueFactory">The <see cref="T:System.Func{T}"/> invoked to initialize the
+            reference.</param>
+            <returns>The initialized reference of type <typeparamref name="T"/>.</returns>
+            <exception cref="T:System.MissingMemberException">Type <typeparamref name="T"/> does not have a
+            default constructor.</exception>
+            <exception cref="T:System.InvalidOperationException"><paramref name="valueFactory"/> returned
+            null.</exception>
+            <remarks>
+            <para>
+            This method may only be used on reference types, and <paramref name="valueFactory"/> may
+            not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or
+            to allow null reference types, see other overloads of EnsureInitialized.
+            </para>
+            <para>
+            This method may be used concurrently by multiple threads to initialize <paramref name="target"/>.  
+            In the event that multiple threads access this method concurrently, multiple instances of <typeparamref name="T"/>
+            may be created, but only one will be stored into <paramref name="target"/>. In such an occurrence, this method will not dispose of the
+            objects that were not stored.  If such objects must be disposed, it is up to the caller to determine 
+            if an object was not used and to then dispose of the object appropriately.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitializedCore``1(``0@,System.Func{``0})">
+            <summary>
+            Initialize the target using the given delegate (slow path).
+            </summary>
+            <typeparam name="T">The reference type of the reference to be initialized.</typeparam>
+            <param name="target">The variable that need to be initialized</param>
+            <param name="valueFactory">The delegate that will be executed to initialize the target</param>
+            <returns>The initialized variable</returns>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitialized``1(``0@,System.Boolean@,System.Object@)">
+            <summary>
+            Initializes a target reference or value type with its default constructor if it has not already
+            been initialized.
+            </summary>
+            <typeparam name="T">The type of the reference to be initialized.</typeparam>
+            <param name="target">A reference or value of type <typeparamref name="T"/> to initialize if it
+            has not already been initialized.</param>
+            <param name="initialized">A reference to a boolean that determines whether the target has already
+            been initialized.</param>
+            <param name="syncLock">A reference to an object used as the mutually exclusive lock for initializing
+            <paramref name="target"/>.</param>
+            <returns>The initialized value of type <typeparamref name="T"/>.</returns>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitialized``1(``0@,System.Boolean@,System.Object@,System.Func{``0})">
+            <summary>
+            Initializes a target reference or value type with a specified function if it has not already been
+            initialized.
+            </summary>
+            <typeparam name="T">The type of the reference to be initialized.</typeparam>
+            <param name="target">A reference or value of type <typeparamref name="T"/> to initialize if it
+            has not already been initialized.</param>
+            <param name="initialized">A reference to a boolean that determines whether the target has already
+            been initialized.</param>
+            <param name="syncLock">A reference to an object used as the mutually exclusive lock for initializing
+            <paramref name="target"/>.</param>
+            <param name="valueFactory">The <see cref="T:System.Func{T}"/> invoked to initialize the
+            reference or value.</param>
+            <returns>The initialized value of type <typeparamref name="T"/>.</returns>
+        </member>
+        <member name="M:System.Threading.LazyInitializer.EnsureInitializedCore``1(``0@,System.Boolean@,System.Object@,System.Func{``0})">
+            <summary>
+            Ensure the target is initialized and return the value (slow path). This overload permits nulls
+            and also works for value type targets. Uses the supplied function to create the value.
+            </summary>
+            <typeparam name="T">The type of target.</typeparam>
+            <param name="target">A reference to the target to be initialized.</param>
+            <param name="initialized">A reference to a location tracking whether the target has been initialized.</param>
+            <param name="syncLock">A reference to a location containing a mutual exclusive lock.</param>
+            <param name="valueFactory">
+            The <see cref="T:System.Func{T}"/> to invoke in order to produce the lazily-initialized value.
+            </param>
+            <returns>The initialized object.</returns>
+        </member>
+        <member name="T:System.Threading.ThreadLocalGlobalCounter">
+            <summary>
+            A seprate non generic class that contains a global counter for fast path instances for all Ts that has been created, and adds an upper limit for all instances
+            that uses the fast path, if this limit has been reached, all new instances will use the slow path
+            </summary>
+        </member>
+        <member name="T:System.Threading.ThreadLocal`1">
+            <summary>
+            Provides thread-local storage of data.
+            </summary>
+            <typeparam name="T">Specifies the type of data stored per-thread.</typeparam>
+            <remarks>
+            <para>
+            With the exception of <see cref="M:System.Threading.ThreadLocal`1.Dispose"/>, all public and protected members of 
+            <see cref="T:System.Threading.ThreadLocal`1"/> are thread-safe and may be used
+            concurrently from multiple threads.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.#ctor">
+            <summary>
+            Initializes the <see cref="T:System.Threading.ThreadLocal`1"/> instance.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.#ctor(System.Func{`0})">
+            <summary>
+            Initializes the <see cref="T:System.Threading.ThreadLocal`1"/> instance with the
+            specified <paramref name="valueFactory"/> function.
+            </summary>
+            <param name="valueFactory">
+            The <see cref="T:System.Func{T}"/> invoked to produce a lazily-initialized value when 
+            an attempt is made to retrieve <see cref="P:System.Threading.ThreadLocal`1.Value"/> without it having been previously initialized.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="valueFactory"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.Finalize">
+            <summary>
+            Releases the resources used by this <see cref="T:System.Threading.ThreadLocal{T}" /> instance.
+            </summary>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.Dispose">
+            <summary>
+            Releases the resources used by this <see cref="T:System.Threading.ThreadLocal{T}" /> instance.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.ThreadLocal{T}"/>, this method is not thread-safe.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.Dispose(System.Boolean)">
+            <summary>
+            Releases the resources used by this <see cref="T:System.Threading.ThreadLocal{T}"/> instance.
+            </summary>
+            <param name="disposing">
+            A Boolean value that indicates whether this method is being called due to a call to <see cref="M:System.Threading.ThreadLocal`1.Dispose"/>.
+            </param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.ThreadLocal{T}"/>, this method is not thread-safe.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.FindNextTypeIndex">
+            <summary>
+            Tries to get a unique index for the current instance of type T, it first tries to get it from the pool if it is not empty, otherwise it
+            increments the global counter if it is still below the maximum, otherwise it fails and returns -1
+            </summary>
+            <returns>True if there is an index available, false otherwise</returns>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.GetTypesFromIndex">
+            <summary>
+            Gets an array of types that will be used as generic parameters for the GenericHolder class
+            </summary>
+            <returns>The types array</returns>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.ToString">
+            <summary>Creates and returns a string representation of this instance for the current thread.</summary>
+            <returns>The result of calling <see cref="M:System.Object.ToString"/> on the <see cref="P:System.Threading.ThreadLocal`1.Value"/>.</returns>
+            <exception cref="T:System.NullReferenceException">
+            The <see cref="P:System.Threading.ThreadLocal`1.Value"/> for the current thread is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            The initialization function referenced <see cref="P:System.Threading.ThreadLocal`1.Value"/> in an improper manner.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.ThreadLocal`1"/> instance has been disposed.
+            </exception>
+            <remarks>
+            Calling this method forces initialization for the current thread, as is the
+            case with accessing <see cref="P:System.Threading.ThreadLocal`1.Value"/> directly.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.ThreadLocal`1.CreateValue">
+            <summary>
+            Private helper function to lazily create the value using the calueSelector if specified in the constructor or the default parameterless constructor
+            </summary>
+            <returns>Returns the boxed object</returns>
+        </member>
+        <member name="P:System.Threading.ThreadLocal`1.Value">
+            <summary>
+            Gets or sets the value of this instance for the current thread.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The initialization function referenced <see cref="P:System.Threading.ThreadLocal`1.Value"/> in an improper manner.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.ThreadLocal`1"/> instance has been disposed.
+            </exception>
+            <remarks>
+            If this instance was not previously initialized for the current thread,
+            accessing <see cref="P:System.Threading.ThreadLocal`1.Value"/> will attempt to initialize it. If an initialization function was 
+            supplied during the construction, that initialization will happen by invoking the function 
+            to retrieve the initial value for <see cref="P:System.Threading.ThreadLocal`1.Value"/>.  Otherwise, the default value of 
+            <typeparamref name="T"/> will be used.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.ThreadLocal`1.IsValueCreated">
+            <summary>
+            Gets whether <see cref="P:System.Threading.ThreadLocal`1.Value"/> is initialized on the current thread.
+            </summary>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.ThreadLocal`1"/> instance has been disposed.
+            </exception>
+        </member>
+        <member name="P:System.Threading.ThreadLocal`1.ValueForDebugDisplay">
+            <summary>Gets the value of the ThreadLocal&lt;T&gt; for debugging display purposes. It takes care of getting
+            the value for the current thread in the ThreadLocal mode.</summary>
+        </member>
+        <member name="T:System.Threading.ThreadLocal`1.HolderBase">
+            <summary>
+            The base abstract class for the holder
+            </summary>
+        </member>
+        <member name="T:System.Threading.ThreadLocal`1.TLSHolder">
+            <summary>
+            The TLS holder representation
+            </summary>
+        </member>
+        <member name="T:System.Threading.ThreadLocal`1.GenericHolder`3">
+            <summary>
+            The generic holder representation
+            </summary>
+            <typeparam name="U">Dummy param</typeparam>
+            <typeparam name="V">Dummy param</typeparam>
+            <typeparam name="W">Dummy param</typeparam>
+        </member>
+        <member name="T:System.Threading.ThreadLocal`1.Boxed">
+            <summary>
+            wrapper to the actual value
+            </summary>
+        </member>
+        <member name="T:System.Threading.SystemThreading_ThreadLocalDebugView`1">
+            <summary>A debugger view of the ThreadLocal&lt;T&gt; to surface additional debugging properties and 
+            to ensure that the ThreadLocal&lt;T&gt; does not become initialized if it was not already.</summary>
+        </member>
+        <member name="M:System.Threading.SystemThreading_ThreadLocalDebugView`1.#ctor(System.Threading.ThreadLocal{`0})">
+            <summary>Constructs a new debugger view object for the provided ThreadLocal object.</summary>
+            <param name="tlocal">A ThreadLocal object to browse in the debugger.</param>
+        </member>
+        <member name="P:System.Threading.SystemThreading_ThreadLocalDebugView`1.IsValueCreated">
+            <summary>Returns whether the ThreadLocal object is initialized or not.</summary>
+        </member>
+        <member name="P:System.Threading.SystemThreading_ThreadLocalDebugView`1.Value">
+            <summary>Returns the value of the ThreadLocal object.</summary>
+        </member>
+        <member name="T:System.Threading.SemaphoreSlim">
+            <summary>
+            Limits the number of threads that can access a resource or pool of resources concurrently.
+            </summary>
+            <remarks>
+            <para>
+            The <see cref="T:System.Threading.SemaphoreSlim"/> provides a lightweight semaphore class that doesn't
+            use Windows kernel semaphores.
+            </para>
+            <para>
+            All public and protected members of <see cref="T:System.Threading.SemaphoreSlim"/> are thread-safe and may be used
+            concurrently from multiple threads, with the exception of Dispose, which
+            must only be used when all other operations on the <see cref="T:System.Threading.SemaphoreSlim"/> have
+            completed.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.SemaphoreSlim"/> class, specifying
+            the initial number of requests that can be granted concurrently.
+            </summary>
+            <param name="initialCount">The initial number of requests for the semaphore that can be granted
+            concurrently.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="initialCount"/>
+            is less than 0.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.SemaphoreSlim"/> class, specifying
+            the initial and maximum number of requests that can be granted concurrently.
+            </summary>
+            <param name="initialCount">The initial number of requests for the semaphore that can be granted
+            concurrently.</param>
+            <param name="maxCount">The maximum number of requests for the semaphore that can be granted
+            concurrently.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"> <paramref name="initialCount"/>
+            is less than 0. -or-
+            <paramref name="initialCount"/> is greater than <paramref name="maxCount"/>. -or-
+            <paramref name="maxCount"/> is less than 0.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>.
+            </summary>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait(System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>, while observing a
+            <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> token to
+            observe.</param>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> was
+            canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait(System.TimeSpan)">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>, using a <see cref="T:System.TimeSpan"/> to measure the time interval.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>true if the current thread successfully entered the <see cref="T:System.Threading.SemaphoreSlim"/>;
+            otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait(System.TimeSpan,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>, using a <see cref="T:System.TimeSpan"/> to measure the time interval, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if the current thread successfully entered the <see cref="T:System.Threading.SemaphoreSlim"/>;
+            otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> was canceled.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait(System.Int32)">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>, using a 32-bit
+            signed integer to measure the time interval.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <returns>true if the current thread successfully entered the <see cref="T:System.Threading.SemaphoreSlim"/>;
+            otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Wait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Blocks the current thread until it can enter the <see cref="T:System.Threading.SemaphoreSlim"/>,
+            using a 32-bit signed integer to measure the time interval, 
+            while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to
+            wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to observe.</param>
+            <returns>true if the current thread successfully entered the <see cref="T:System.Threading.SemaphoreSlim"/>; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a negative number other than -1,
+            which represents an infinite time-out.</exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> was canceled.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(System.Int32,System.Int64,System.Threading.CancellationToken)">
+            <summary>
+            Local helper function, waits on the monitor until the monitor recieves signal or the
+            timeout is expired
+            </summary>
+            <param name="millisecondsTimeout">The maximum timeout</param>
+            <param name="startTimeTicks">The start ticks to calculate the elapsed time</param>
+            <param name="cancellationToken">The CancellationToken to observe.</param>
+            <returns>true if the monitor recieved a signal, false if the timeout expired</returns>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Release">
+            <summary>
+            Exits the <see cref="T:System.Threading.SemaphoreSlim"/> once.
+            </summary>
+            <returns>The previous count of the <see cref="T:System.Threading.SemaphoreSlim"/>.</returns>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Release(System.Int32)">
+            <summary>
+            Exits the <see cref="T:System.Threading.SemaphoreSlim"/> a specified number of times.
+            </summary>
+            <param name="releaseCount">The number of times to exit the semaphore.</param>
+            <returns>The previous count of the <see cref="T:System.Threading.SemaphoreSlim"/>.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="releaseCount"/> is less
+            than 1.</exception>
+            <exception cref="T:System.Threading.SemaphoreFullException">The <see cref="T:System.Threading.SemaphoreSlim"/> has
+            already reached its maximum size.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Dispose">
+            <summary>
+            Releases all resources used by the current instance of <see cref="T:System.Threading.SemaphoreSlim"/>.
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.SemaphoreSlim"/>, <see cref="M:System.Threading.SemaphoreSlim.Dispose"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.Dispose(System.Boolean)">
+            <summary>
+            When overridden in a derived class, releases the unmanaged resources used by the 
+            <see cref="T:System.Threading.ManualResetEventSlim"/>, and optionally releases the managed resources.
+            </summary>
+            <param name="disposing">true to release both managed and unmanaged resources;
+            false to release only unmanaged resources.</param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.SemaphoreSlim"/>, <see cref="M:System.Threading.SemaphoreSlim.Dispose(System.Boolean)"/> is not
+            thread-safe and may not be used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.UpdateTimeOut(System.Int64,System.Int32)">
+            <summary>
+            Helper function to measure and update the wait time
+            </summary>
+            <param name="startTimeTicks"> The first time (in Ticks) observed when the wait started</param>
+            <param name="originalWaitMillisecondsTimeout">The orginal wait timeoutout in milliseconds</param>
+            <returns>The new wait time in milliseconds, -1 if the time expired</returns>
+        </member>
+        <member name="F:System.Threading.SemaphoreSlim.s_cancellationTokenCanceledEventHandler">
+            <summary>
+            Private helper method to wake up waiters when a cancellationToken gets canceled.
+            </summary>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.CheckDispose">
+            <summary>
+            Checks the dispose status by checking the lock object, if it is null means that object
+            has been disposed and throw ObjectDisposedException
+            </summary>
+        </member>
+        <member name="M:System.Threading.SemaphoreSlim.GetResourceString(System.String)">
+            <summary>
+            local helper function to retrieve the exception string message from the resource file
+            </summary>
+            <param name="str">The key string</param>
+        </member>
+        <member name="P:System.Threading.SemaphoreSlim.CurrentCount">
+            <summary>
+            Gets the current count of the <see cref="T:System.Threading.SemaphoreSlim"/>.
+            </summary>
+            <value>The current count of the <see cref="T:System.Threading.SemaphoreSlim"/>.</value>
+        </member>
+        <member name="P:System.Threading.SemaphoreSlim.AvailableWaitHandle">
+            <summary>
+            Returns a <see cref="T:System.Threading.WaitHandle"/> that can be used to wait on the semaphore.
+            </summary>
+            <value>A <see cref="T:System.Threading.WaitHandle"/> that can be used to wait on the
+            semaphore.</value>
+            <remarks>
+            A successful wait on the <see cref="P:System.Threading.SemaphoreSlim.AvailableWaitHandle"/> does not imply a successful wait on
+            the <see cref="T:System.Threading.SemaphoreSlim"/> itself, nor does it decrement the semaphore's
+            count. <see cref="P:System.Threading.SemaphoreSlim.AvailableWaitHandle"/> exists to allow a thread to block waiting on multiple
+            semaphores, but such a wait should be followed by a true wait on the target semaphore.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Threading.SemaphoreSlim"/> has been disposed.</exception>
+        </member>
+        <member name="T:System.Threading.SpinWait">
+            <summary>
+            Provides support for spin-based waiting.
+            </summary>
+            <remarks>
+            <para>
+            <see cref="T:System.Threading.SpinWait"/> encapsulates common spinning logic. On single-processor machines, yields are
+            always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™
+            technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of
+            spinning and true yielding.
+            </para>
+            <para>
+            <see cref="T:System.Threading.SpinWait"/> is a value type, which means that low-level code can utilize SpinWait without
+            fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications.
+            In most cases, you should use the synchronization classes provided by the .NET Framework, such as
+            <see cref="T:System.Threading.Monitor"/>. For most purposes where spin waiting is required, however,
+            the <see cref="T:System.Threading.SpinWait"/> type should be preferred over the <see cref="M:System.Threading.Thread.SpinWait(System.Int32)"/> method.
+            </para>
+            <para>
+            While SpinWait is designed to be used in concurrent applications, it is not designed to be
+            used from multiple threads concurrently.  SpinWait's members are not thread-safe.  If multiple
+            threads must spin, each should use its own instance of SpinWait.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SpinWait.SpinOnce">
+            <summary>
+            Performs a single spin.
+            </summary>
+            <remarks>
+            This is typically called in a loop, and may change in behavior based on the number of times a
+            <see cref="M:System.Threading.SpinWait.SpinOnce"/> has been called thus far on this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SpinWait.Reset">
+            <summary>
+            Resets the spin counter.
+            </summary>
+            <remarks>
+            This makes <see cref="M:System.Threading.SpinWait.SpinOnce"/> and <see cref="P:System.Threading.SpinWait.NextSpinWillYield"/> behave as though no calls
+            to <see cref="M:System.Threading.SpinWait.SpinOnce"/> had been issued on this instance. If a <see cref="T:System.Threading.SpinWait"/> instance
+            is reused many times, it may be useful to reset it to avoid yielding too soon.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SpinWait.SpinUntil(System.Func{System.Boolean})">
+            <summary>
+            Spins until the specified condition is satisfied.
+            </summary>
+            <param name="condition">A delegate to be executed over and over until it returns true.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="condition"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.SpinWait.SpinUntil(System.Func{System.Boolean},System.TimeSpan)">
+            <summary>
+            Spins until the specified condition is satisfied or until the specified timeout is expired.
+            </summary>
+            <param name="condition">A delegate to be executed over and over until it returns true.</param>
+            <param name="timeout">
+            A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds to wait, 
+            or a TimeSpan that represents -1 milliseconds to wait indefinitely.</param>
+            <returns>True if the condition is satisfied within the timeout; otherwise, false</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="condition"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative number
+            other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.</exception>
+        </member>
+        <member name="M:System.Threading.SpinWait.SpinUntil(System.Func{System.Boolean},System.Int32)">
+            <summary>
+            Spins until the specified condition is satisfied or until the specified timeout is expired.
+            </summary>
+            <param name="condition">A delegate to be executed over and over until it returns true.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <returns>True if the condition is satisfied within the timeout; otherwise, false</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="condition"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+        </member>
+        <member name="P:System.Threading.SpinWait.Count">
+            <summary>
+            Gets the number of times <see cref="M:System.Threading.SpinWait.SpinOnce"/> has been called on this instance.
+            </summary>
+        </member>
+        <member name="P:System.Threading.SpinWait.NextSpinWillYield">
+            <summary>
+            Gets whether the next call to <see cref="M:System.Threading.SpinWait.SpinOnce"/> will yield the processor, triggering a
+            forced context switch.
+            </summary>
+            <value>Whether the next call to <see cref="M:System.Threading.SpinWait.SpinOnce"/> will yield the processor, triggering a
+            forced context switch.</value>
+            <remarks>
+            On a single-CPU machine, <see cref="M:System.Threading.SpinWait.SpinOnce"/> always yields the processor. On machines with
+            multiple CPUs, <see cref="M:System.Threading.SpinWait.SpinOnce"/> may yield after an unspecified number of calls.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.PlatformHelper">
+            <summary>
+            A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval
+            </summary>
+        </member>
+        <member name="P:System.Threading.PlatformHelper.ProcessorCount">
+            <summary>
+            Gets the number of available processors
+            </summary>
+        </member>
+        <member name="P:System.Threading.PlatformHelper.IsSingleProcessor">
+            <summary>
+            Gets whether the current machine has only a single processor.
+            </summary>
+        </member>
+        <member name="T:System.Threading.SpinLock">
+            <summary>
+            Provides a mutual exclusion lock primitive where a thread trying to acquire the lock waits in a loop
+            repeatedly checking until the lock becomes available.
+            </summary>
+            <remarks>
+            <para>
+            Spin locks can be used for leaf-level locks where the object allocation implied by using a <see cref="T:System.Threading.Monitor"/>, in size or due to garbage collection pressure, is overly
+            expensive. Avoiding blocking is another reason that a spin lock can be useful, however if you expect
+            any significant amount of blocking, you are probably best not using spin locks due to excessive
+            spinning. Spinning can be beneficial when locks are fine grained and large in number (for example, a
+            lock per node in a linked list) as well as when lock hold times are always extremely short. In
+            general, while holding a spin lock, one should avoid blocking, calling anything that itself may
+            block, holding more than one spin lock at once, making dynamically dispatched calls (interface and
+            virtuals), making statically dispatched calls into any code one doesn't own, or allocating memory.
+            </para>
+            <para>
+            <see cref="T:System.Threading.SpinLock"/> should only be used when it's been determined that doing so will improve an
+            application's performance. It's also important to note that <see cref="T:System.Threading.SpinLock"/> is a value type,
+            for performance reasons. As such, one must be very careful not to accidentally copy a SpinLock
+            instance, as the two instances (the original and the copy) would then be completely independent of
+            one another, which would likely lead to erroneous behavior of the application. If a SpinLock instance
+            must be passed around, it should be passed by reference rather than by value.
+            </para>
+            <para>
+            Do not store <see cref="T:System.Threading.SpinLock"/> instances in readonly fields.
+            </para>
+            <para>
+            All members of <see cref="T:System.Threading.SpinLock"/> are thread-safe and may be used from multiple threads
+            concurrently.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.SpinLock.#ctor(System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.SpinLock"/>
+            structure with the option to track thread IDs to improve debugging.
+            </summary>
+            <remarks>
+            The default constructor for <see cref="T:System.Threading.SpinLock"/> tracks thread ownership.
+            </remarks>
+            <param name="enableThreadOwnerTracking">Whether to capture and use thread IDs for debugging
+            purposes.</param>
+        </member>
+        <member name="M:System.Threading.SpinLock.Enter(System.Boolean@)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.SpinLock"/>
+            structure with the option to track thread IDs to improve debugging.
+            </summary>
+            <remarks>
+            The default constructor for <see cref="T:System.Threading.SpinLock"/> tracks thread ownership.
+            </remarks>
+            <summary>
+            Acquires the lock in a reliable manner, such that even if an exception occurs within the method
+            call, <paramref name="lockTaken"/> can be examined reliably to determine whether the lock was
+            acquired.
+            </summary>
+            <remarks>
+            <see cref="T:System.Threading.SpinLock"/> is a non-reentrant lock, meaning that if a thread holds the lock, it is
+            not allowed to enter the lock again. If thread ownership tracking is enabled (whether it's
+            enabled is available through <see cref="P:System.Threading.SpinLock.IsThreadOwnerTrackingEnabled"/>), an exception will be
+            thrown when a thread tries to re-enter a lock it already holds. However, if thread ownership
+            tracking is disabled, attempting to enter a lock already held will result in deadlock.
+            </remarks>
+            <param name="lockTaken">True if the lock is acquired; otherwise, false. <paramref name="lockTaken"/> must be initialized to false prior to calling this method.</param>
+            <exception cref="T:System.Threading.LockRecursionException">
+            Thread ownership tracking is enabled, and the current thread has already acquired this lock.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="lockTaken"/> argument must be initialized to false prior to calling Enter.
+            </exception>
+        </member>
+        <member name="M:System.Threading.SpinLock.TryEnter(System.Boolean@)">
+            <summary>
+            Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
+            the method call, <paramref name="lockTaken"/> can be examined reliably to determine whether the
+            lock was acquired.
+            </summary>
+            <remarks>
+            Unlike <see cref="M:System.Threading.SpinLock.Enter(System.Boolean@)"/>, TryEnter will not block waiting for the lock to be available. If the
+            lock is not available when TryEnter is called, it will return immediately without any further
+            spinning.
+            </remarks>
+            <param name="lockTaken">True if the lock is acquired; otherwise, false. <paramref name="lockTaken"/> must be initialized to false prior to calling this method.</param>
+            <exception cref="T:System.Threading.LockRecursionException">
+            Thread ownership tracking is enabled, and the current thread has already acquired this lock.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="lockTaken"/> argument must be initialized to false prior to calling TryEnter.
+            </exception>
+        </member>
+        <member name="M:System.Threading.SpinLock.TryEnter(System.TimeSpan,System.Boolean@)">
+            <summary>
+            Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
+            the method call, <paramref name="lockTaken"/> can be examined reliably to determine whether the
+            lock was acquired.
+            </summary>
+            <remarks>
+            Unlike <see cref="M:System.Threading.SpinLock.Enter(System.Boolean@)"/>, TryEnter will not block indefinitely waiting for the lock to be
+            available. It will block until either the lock is available or until the <paramref name="timeout"/>
+            has expired.
+            </remarks>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <param name="lockTaken">True if the lock is acquired; otherwise, false. <paramref name="lockTaken"/> must be initialized to false prior to calling this method.</param>
+            <exception cref="T:System.Threading.LockRecursionException">
+            Thread ownership tracking is enabled, and the current thread has already acquired this lock.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="lockTaken"/> argument must be initialized to false prior to calling TryEnter.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative
+            number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
+            than <see cref="F:System.Int32.MaxValue"/> milliseconds.
+            </exception>
+        </member>
+        <member name="M:System.Threading.SpinLock.TryEnter(System.Int32,System.Boolean@)">
+            <summary>
+            Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
+            the method call, <paramref name="lockTaken"/> can be examined reliably to determine whether the
+            lock was acquired.
+            </summary>
+            <remarks>
+            Unlike <see cref="M:System.Threading.SpinLock.Enter(System.Boolean@)"/>, TryEnter will not block indefinitely waiting for the lock to be
+            available. It will block until either the lock is available or until the <paramref name="millisecondsTimeout"/> has expired.
+            </remarks>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <param name="lockTaken">True if the lock is acquired; otherwise, false. <paramref name="lockTaken"/> must be initialized to false prior to calling this method.</param>
+            <exception cref="T:System.Threading.LockRecursionException">
+            Thread ownership tracking is enabled, and the current thread has already acquired this lock.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="lockTaken"/> argument must be initialized to false prior to calling TryEnter.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is
+            a negative number other than -1, which represents an infinite time-out.</exception>
+        </member>
+        <member name="M:System.Threading.SpinLock.ContinueTryEnter(System.Int32,System.Boolean@)">
+            <summary>
+            Try acquire the lock with long path, this is usually called after the first path in Enter and
+            TryEnter failed The reason for short path is to make it inline in the run time which improves the
+            performance. This method assumed that the parameter are validated in Enter ir TryENter method
+            </summary>
+            <param name="millisecondsTimeout">The timeout milliseconds</param>
+            <param name="lockTaken">The lockTaken param</param>
+        </member>
+        <member name="M:System.Threading.SpinLock.DecrementWaiters">
+            <summary>
+            decrements the waiters, in case of the timeout is expired
+            </summary>
+        </member>
+        <member name="M:System.Threading.SpinLock.ContinueTryEnterWithThreadTracking(System.Int32,System.Int64,System.Boolean@)">
+            <summary>
+            ContinueTryEnter for the thread tracking mode enabled
+            </summary>
+        </member>
+        <member name="M:System.Threading.SpinLock.TimeoutExpired(System.Int64,System.Int32)">
+            <summary>
+            Helper function to validate the timeout
+            </summary>
+            <param name="startTicks"> The start time in ticks</param>
+            <param name="originalWaitTime">The orginal wait time</param>
+            <returns>True if expired, false otherwise</returns>
+        </member>
+        <member name="M:System.Threading.SpinLock.Exit">
+            <summary>
+            Releases the lock.
+            </summary>
+            <remarks>
+            The default overload of <see cref="M:System.Threading.SpinLock.Exit"/> provides the same behavior as if calling <see cref="M:System.Threading.SpinLock.Exit(System.Boolean)"/> using true as the argument.
+            </remarks>
+            <exception cref="T:System.Threading.SynchronizationLockException">
+            Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
+            </exception>
+        </member>
+        <member name="M:System.Threading.SpinLock.Exit(System.Boolean)">
+            <summary>
+            Releases the lock.
+            </summary>
+            <param name="useMemoryBarrier">
+            A Boolean value that indicates whether a memory fence should be issued in order to immediately
+            publish the exit operation to other threads.
+            </param>
+            <remarks>
+            Calling <see cref="M:System.Threading.SpinLock.Exit(System.Boolean)"/> with the <paramref name="useMemoryBarrier"/> argument set to
+            true will improve the fairness of the lock at the expense of some performance. The default <see cref="M:System.Threading.SpinLock.Enter(System.Boolean@)"/>
+            overload behaves as if specifying true for <paramref name="useMemoryBarrier"/>.
+            </remarks>
+            <exception cref="T:System.Threading.SynchronizationLockException">
+            Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
+            </exception>
+        </member>
+        <member name="P:System.Threading.SpinLock.IsHeld">
+            <summary>
+            Gets whether the lock is currently held by any thread.
+            </summary>
+        </member>
+        <member name="P:System.Threading.SpinLock.IsHeldByCurrentThread">
+            <summary>
+            Gets whether the lock is currently held by any thread.
+            </summary>
+            <summary>
+            Gets whether the lock is held by the current thread.
+            </summary>
+            <remarks>
+            If the lock was initialized to track owner threads, this will return whether the lock is acquired
+            by the current thread. It is invalid to use this property when the lock was initialized to not
+            track thread ownership.
+            </remarks>
+            <exception cref="T:System.InvalidOperationException">
+            Thread ownership tracking is disabled.
+            </exception>
+        </member>
+        <member name="P:System.Threading.SpinLock.IsThreadOwnerTrackingEnabled">
+            <summary>Gets whether thread ownership tracking is enabled for this instance.</summary>
+        </member>
+        <member name="T:System.Threading.SpinLock.SystemThreading_SpinLockDebugView">
+            <summary>
+            Internal class used by debug type proxy attribute to display the owner thread ID 
+            </summary>
+        </member>
+        <member name="M:System.Threading.SpinLock.SystemThreading_SpinLockDebugView.#ctor(System.Threading.SpinLock)">
+            <summary>
+            SystemThreading_SpinLockDebugView constructor
+            </summary>
+            <param name="spinLock">The SpinLock to be proxied.</param>
+        </member>
+        <member name="P:System.Threading.SpinLock.SystemThreading_SpinLockDebugView.IsHeldByCurrentThread">
+            <summary>
+            Checks if the lock is held by the current thread or not
+            </summary>
+        </member>
+        <member name="P:System.Threading.SpinLock.SystemThreading_SpinLockDebugView.OwnerThreadID">
+            <summary>
+            Gets the current owner thread, zero if it is released
+            </summary>
+        </member>
+        <member name="P:System.Threading.SpinLock.SystemThreading_SpinLockDebugView.IsHeld">
+            <summary>
+             Gets whether the lock is currently held by any thread or not.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelOptions">
+            <summary>
+            Stores options that configure the operation of methods on the 
+            <see cref="T:System.Threading.Tasks.Parallel">Parallel</see> class.
+            </summary>
+            <remarks>
+            By default, methods on the Parallel class attempt to utilize all available processors, are non-cancelable, and target
+            the default TaskScheduler (TaskScheduler.Default). <see cref="T:System.Threading.Tasks.ParallelOptions"/> enables
+            overriding these defaults.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelOptions.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.ParallelOptions"/> class.
+            </summary>
+            <remarks>
+            This constructor initializes the instance with default values.  <see cref="P:System.Threading.Tasks.ParallelOptions.MaxDegreeOfParallelism"/>
+            is initialized to -1, signifying that there is no upper bound set on how much parallelism should
+            be employed.  <see cref="P:System.Threading.Tasks.ParallelOptions.CancellationToken"/> is initialized to a non-cancelable token,
+            and <see cref="P:System.Threading.Tasks.ParallelOptions.TaskScheduler"/> is initialized to the default scheduler (TaskScheduler.Default).  
+            All of these defaults may be overwritten using the property set accessors on the instance.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelOptions.TaskScheduler">
+            <summary>
+            Gets or sets the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> 
+            associated with this <see cref="T:System.Threading.Tasks.ParallelOptions"/> instance. Setting this property to null
+            indicates that the current scheduler should be used.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelOptions.MaxDegreeOfParallelism">
+            <summary>
+            Gets or sets the maximum degree of parallelism enabled by this ParallelOptions instance.
+            </summary>
+            <remarks>
+            The <see cref="P:System.Threading.Tasks.ParallelOptions.MaxDegreeOfParallelism"/> limits the number of concurrent operations run by <see cref="T:System.Threading.Tasks.Parallel">Parallel</see> method calls that are passed this
+            ParallelOptions instance to the set value, if it is positive. If <see cref="P:System.Threading.Tasks.ParallelOptions.MaxDegreeOfParallelism"/> is -1, then there is no limit placed on the number of concurrently
+            running operations.
+            </remarks>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The exception that is thrown when this <see cref="P:System.Threading.Tasks.ParallelOptions.MaxDegreeOfParallelism"/> is set to 0 or some
+            value less than -1.
+            </exception>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelOptions.CancellationToken">
+            <summary>
+            Gets or sets the <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            associated with this <see cref="T:System.Threading.Tasks.ParallelOptions"/> instance.
+            </summary>
+            <remarks>
+            Providing a <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            to a <see cref="T:System.Threading.Tasks.Parallel">Parallel</see> method enables the operation to be
+            exited early. Code external to the operation may cancel the token, and if the operation observes the
+            token being set, it may exit early by throwing an
+            <see cref="T:System.OperationCanceledException"/>.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.Parallel">
+            <summary>
+            Provides support for parallel loops and regions.
+            </summary>
+            <remarks>
+            The <see cref="T:System.Threading.Tasks.Parallel"/> class provides library-based data parallel replacements
+            for common operations such as for loops, for each loops, and execution of a set of statements.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.Invoke(System.Action[])">
+            <summary>
+            Executes each of the provided actions, possibly in parallel.
+            </summary>
+            <param name="actions">An array of <see cref="T:System.Action">Actions</see> to execute.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="actions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="actions"/> array contains a null element.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown when any
+            action in the <paramref name="actions"/> array throws an exception.</exception>
+            <remarks>
+            This method can be used to execute a set of operations, potentially in parallel.   
+            No guarantees are made about the order in which the operations execute or whether 
+            they execute in parallel.  This method does not return until each of the 
+            provided operations has completed, regardless of whether completion 
+            occurs due to normal or exceptional termination.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.Invoke(System.Threading.Tasks.ParallelOptions,System.Action[])">
+            <summary>
+            Executes each of the provided actions, possibly in parallel.
+            </summary>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="actions">An array of <see cref="T:System.Action">Actions</see> to execute.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="actions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="actions"/> array contains a null element.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown when any 
+            action in the <paramref name="actions"/> array throws an exception.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <remarks>
+            This method can be used to execute a set of operations, potentially in parallel.   
+            No guarantees are made about the order in which the operations execute or whether 
+            the they execute in parallel.  This method does not return until each of the 
+            provided operations has completed, regardless of whether completion 
+            occurs due to normal or exceptional termination.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Action{System.Int32})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the iteration count (an Int32) as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int64,System.Int64,System.Action{System.Int64})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the iteration count (an Int64) as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Threading.Tasks.ParallelOptions,System.Action{System.Int32})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the iteration count (an Int32) as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int64,System.Int64,System.Threading.Tasks.ParallelOptions,System.Action{System.Int64})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the iteration count (an Int64) as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Action{System.Int32,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int32), 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </para>
+            <para>
+            Calling <see cref="M:System.Threading.Tasks.ParallelLoopState.Break">ParallelLoopState.Break()</see>
+            informs the For operation that iterations after the current one need not 
+            execute.  However, all iterations before the current one will still need to be executed if they have not already.
+            Therefore, calling Break is similar to using a break operation within a 
+            conventional for loop in a language like C#, but it is not a perfect substitute: for example, there is no guarantee that iterations 
+            after the current one will definitely not execute.
+            </para>
+            <para>
+            If executing all iterations before the current one is not necessary, 
+            <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop">ParallelLoopState.Stop()</see>
+            should be preferred to using Break.  Calling Stop informs the For loop that it may abandon all remaining
+            iterations, regardless of whether they're for interations above or below the current, 
+            since all required work has already been completed.  As with Break, however, there are no guarantees regarding 
+            which other iterations will not execute.
+            </para>
+            <para>
+            When a loop is ended prematurely, the <see cref="T:ParallelLoopState"/> that's returned will contain
+            relevant information about the loop's completion.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int64,System.Int64,System.Action{System.Int64,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int64), 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int32,System.Int32,System.Threading.Tasks.ParallelOptions,System.Action{System.Int32,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int32), 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For(System.Int64,System.Int64,System.Threading.Tasks.ParallelOptions,System.Action{System.Int64,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int64), 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For``1(System.Int32,System.Int32,System.Func{``0},System.Func{System.Int32,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Action{``0})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int32), 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For``1(System.Int64,System.Int64,System.Func{``0},System.Func{System.Int64,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Action{``0})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.  Supports 64-bit indices.
+            </summary>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int64), 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For``1(System.Int32,System.Int32,System.Threading.Tasks.ParallelOptions,System.Func{``0},System.Func{System.Int32,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Action{``0})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int32), 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.For``1(System.Int64,System.Int64,System.Threading.Tasks.ParallelOptions,System.Func{``0},System.Func{System.Int64,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Action{``0})">
+            <summary>
+            Executes a for loop in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="fromInclusive">The start index, inclusive.</param>
+            <param name="toExclusive">The end index, exclusive.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each value in the iteration range: 
+            [fromInclusive, toExclusive).  It is provided with the following parameters: the iteration count (an Int64), 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForWorker``1(System.Int32,System.Int32,System.Threading.Tasks.ParallelOptions,System.Action{System.Int32},System.Action{System.Int32,System.Threading.Tasks.ParallelLoopState},System.Func{System.Int32,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Func{``0},System.Action{``0})">
+            <summary>
+            Performs the major work of the parallel for loop. It assumes that argument validation has already
+            been performed by the caller. This function's whole purpose in life is to enable as much reuse of
+            common implementation details for the various For overloads we offer. Without it, we'd end up
+            with lots of duplicate code. It handles: (1) simple for loops, (2) for loops that depend on
+            ParallelState, and (3) for loops with thread local data.
+            
+            @TODO: at some point in the future, we may want to manually inline the interesting bits into the
+            specific overloads above. There is some overhead associated with the extra arguments passed to
+            the function, and various if-checks in the code. It is also more difficult to follow what the
+            code does as-is because it has to handle the three flavors.
+            </summary>
+            <typeparam name="TLocal">The type of the local data.</typeparam>
+            <param name="fromInclusive">The loop's start index, inclusive.</param>
+            <param name="toExclusive">The loop's end index, exclusive.</param>
+            <param name="parallelOptions">A ParallelOptions instance.</param>
+            <param name="body">The simple loop body.</param>
+            <param name="bodyWithState">The loop body for ParallelState overloads.</param>
+            <param name="bodyWithLocal">The loop body for thread local state overloads.</param>
+            <param name="localInit">A selector function that returns new thread local state.</param>
+            <param name="localFinally">A cleanup function to destroy thread local state.</param>
+            <remarks>Only one of the body arguments may be supplied (i.e. they are exclusive).</remarks>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForWorker64``1(System.Int64,System.Int64,System.Threading.Tasks.ParallelOptions,System.Action{System.Int64},System.Action{System.Int64,System.Threading.Tasks.ParallelLoopState},System.Func{System.Int64,System.Threading.Tasks.ParallelLoopState,``0,``0},System.Func{``0},System.Action{``0})">
+            <summary>
+            Performs the major work of the 64-bit parallel for loop. It assumes that argument validation has already
+            been performed by the caller. This function's whole purpose in life is to enable as much reuse of
+            common implementation details for the various For overloads we offer. Without it, we'd end up
+            with lots of duplicate code. It handles: (1) simple for loops, (2) for loops that depend on
+            ParallelState, and (3) for loops with thread local data.
+            
+            @TODO: at some point in the future, we may want to manually inline the interesting bits into the
+            specific overloads above. There is some overhead associated with the extra arguments passed to
+            the function, and various if-checks in the code. It is also more difficult to follow what the
+            code does as-is because it has to handle the three flavors.
+            </summary>
+            <typeparam name="TLocal">The type of the local data.</typeparam>
+            <param name="fromInclusive">The loop's start index, inclusive.</param>
+            <param name="toExclusive">The loop's end index, exclusive.</param>
+            <param name="parallelOptions">A ParallelOptions instance.</param>
+            <param name="body">The simple loop body.</param>
+            <param name="bodyWithState">The loop body for ParallelState overloads.</param>
+            <param name="bodyWithLocal">The loop body for thread local state overloads.</param>
+            <param name="localInit">A selector function that returns new thread local state.</param>
+            <param name="localFinally">A cleanup function to destroy thread local state.</param>
+            <remarks>Only one of the body arguments may be supplied (i.e. they are exclusive).</remarks>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the current element as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the current element as a parameter.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and the current element's index (an Int64).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and the current element's index (an Int64).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Generic.IEnumerable{``0},System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Generic.IEnumerable{``0},System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, the current element's index (an Int64), and some local 
+            state that may be shared amongst iterations that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on an <see cref="T:System.Collections.IEnumerable{TSource}"/> 
+            in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the data in the source.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            enumerable.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, the current element's index (an Int64), and some local 
+            state that may be shared amongst iterations that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEachWorker``2(System.Collections.Generic.IEnumerable{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState},System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Func{``1},System.Action{``1})">
+            <summary>
+            Performs the major work of the parallel foreach loop. It assumes that argument validation has
+            already been performed by the caller. This function's whole purpose in life is to enable as much
+            reuse of common implementation details for the various For overloads we offer. Without it, we'd
+            end up with lots of duplicate code. It handles: (1) simple foreach loops, (2) foreach loops that
+            depend on ParallelState, and (3) foreach loops that access indices, (4) foreach loops with thread
+            local data, and any necessary permutations thereof.
+            
+            @TODO: at some point in the future, we may want to manually inline the interesting bits into the
+            specific overloads above. There is some overhead associated with the extra arguments passed to
+            the function, and various if-checks in the code. It is also more difficult to follow what the
+            code does as-is because it has to handle the all flavors.
+            </summary>
+            <typeparam name="TSource">The type of the source data.</typeparam>
+            <typeparam name="TLocal">The type of the local data.</typeparam>
+            <param name="source">An enumerable data source.</param>
+            <param name="parallelOptions">ParallelOptions instance to use with this ForEach-loop</param>
+            <param name="body">The simple loop body.</param>
+            <param name="bodyWithState">The loop body for ParallelState overloads.</param>
+            <param name="bodyWithStateAndIndex">The loop body for ParallelState/indexed overloads.</param>
+            <param name="bodyWithStateAndLocal">The loop body for ParallelState/thread local state overloads.</param>
+            <param name="bodyWithEverything">The loop body for ParallelState/indexed/thread local state overloads.</param>
+            <param name="localInit">A selector function that returns new thread local state.</param>
+            <param name="localFinally">A cleanup function to destroy thread local state.</param>
+            <remarks>Only one of the bodyXX arguments may be supplied (i.e. they are exclusive).</remarks>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEachWorker``2(``0[],System.Threading.Tasks.ParallelOptions,System.Action{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState},System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Func{``1},System.Action{``1})">
+            <summary>
+            A fast path for the more general ForEachWorker method above. This uses ldelem instructions to
+            access the individual elements of the array, which will be faster.
+            </summary>
+            <typeparam name="TSource">The type of the source data.</typeparam>
+            <typeparam name="TLocal">The type of the local data.</typeparam>
+            <param name="array">An array data source.</param>
+            <param name="parallelOptions">The options to use for execution.</param>
+            <param name="body">The simple loop body.</param>
+            <param name="bodyWithState">The loop body for ParallelState overloads.</param>
+            <param name="bodyWithStateAndIndex">The loop body for indexed/ParallelLoopState overloads.</param>
+            <param name="bodyWithStateAndLocal">The loop body for local/ParallelLoopState overloads.</param>
+            <param name="bodyWithEverything">The loop body for the most generic overload.</param>
+            <param name="localInit">A selector function that returns new thread local state.</param>
+            <param name="localFinally">A cleanup function to destroy thread local state.</param>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEachWorker``2(System.Collections.Generic.IList{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState},System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Func{``1},System.Action{``1})">
+            <summary>
+            A fast path for the more general ForEachWorker method above. This uses IList&lt;T&gt;'s indexer
+            capabilities to access the individual elements of the list rather than an enumerator.
+            </summary>
+            <typeparam name="TSource">The type of the source data.</typeparam>
+            <typeparam name="TLocal">The type of the local data.</typeparam>
+            <param name="list">A list data source.</param>
+            <param name="parallelOptions">The options to use for execution.</param>
+            <param name="body">The simple loop body.</param>
+            <param name="bodyWithState">The loop body for ParallelState overloads.</param>
+            <param name="bodyWithStateAndIndex">The loop body for indexed/ParallelLoopState overloads.</param>
+            <param name="bodyWithStateAndLocal">The loop body for local/ParallelLoopState overloads.</param>
+            <param name="bodyWithEverything">The loop body for the most generic overload.</param>
+            <param name="localInit">A selector function that returns new thread local state.</param>
+            <param name="localFinally">A cleanup function to destroy thread local state.</param>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult"/> structure.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.Partitioner{``0},System.Action{``0})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the current element as a parameter.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.Partitioner{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.OrderablePartitioner{``0},System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
+            OrderablePartitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The OrderablePartitioner that contains the original data source.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner do not return the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IList with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and the current element's index (an Int64).
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Concurrent.Partitioner{``0},System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Concurrent.OrderablePartitioner{``0},System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
+            OrderablePartitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">The OrderablePartitioner that contains the original data source.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner do not return the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IList with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, the current element's index (an Int64), and some local 
+            state that may be shared amongst iterations that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.Partitioner{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the current element as a parameter.
+            </para>    
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.Partitioner{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0,System.Threading.Tasks.ParallelLoopState})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            and a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely.
+            </para>  
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``1(System.Collections.Concurrent.OrderablePartitioner{``0},System.Threading.Tasks.ParallelOptions,System.Action{``0,System.Threading.Tasks.ParallelLoopState,System.Int64})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
+            OrderablePartitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <param name="source">The OrderablePartitioner that contains the original data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner do not return the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IList with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and the current element's index (an Int64).
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Concurrent.Partitioner{``0},System.Threading.Tasks.ParallelOptions,System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">
+            Partitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">The Partitioner that contains the original data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> Partitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> Partitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner does not return 
+            the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() method in the <paramref name="source"/> Partitioner returns an IList 
+            with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() method in the <paramref name="source"/> Partitioner returns an 
+            IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, and some local state that may be shared amongst iterations 
+            that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ForEach``2(System.Collections.Concurrent.OrderablePartitioner{``0},System.Threading.Tasks.ParallelOptions,System.Func{``1},System.Func{``0,System.Threading.Tasks.ParallelLoopState,System.Int64,``1,``1},System.Action{``1})">
+            <summary>
+            Executes a for each operation on a <see cref="T:System.Collections.Concurrent.OrderablePartitioner{TSource}">
+            OrderablePartitioner</see> in which iterations may run in parallel.
+            </summary>
+            <typeparam name="TSource">The type of the elements in <paramref name="source"/>.</typeparam>
+            <typeparam name="TLocal">The type of the thread-local data.</typeparam>
+            <param name="source">The OrderablePartitioner that contains the original data source.</param>
+            <param name="parallelOptions">A <see cref="T:System.Threading.Tasks.ParallelOptions">ParallelOptions</see> 
+            instance that configures the behavior of this operation.</param>
+            <param name="localInit">The function delegate that returns the initial state of the local data 
+            for each thread.</param>
+            <param name="body">The delegate that is invoked once per iteration.</param>
+            <param name="localFinally">The delegate that performs a final action on the local state of each
+            thread.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="source"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="parallelOptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="body"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localInit"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="localFinally"/> argument is null.</exception>
+            <exception cref="T:System.OperationCanceledException">The exception that is thrown when the 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the <paramref name="parallelOptions"/> 
+            argument is set</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            SupportsDynamicPartitions property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            KeysNormalized property in the <paramref name="source"/> OrderablePartitioner returns 
+            false.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when any 
+            methods in the <paramref name="source"/> OrderablePartitioner return null.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner do not return the correct number of partitions.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetPartitions() or GetOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IList with at least one null value.</exception>
+            <exception cref="T:System.InvalidOperationException">The exception that is thrown when the 
+            GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the <paramref name="source"/> 
+            OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.</exception>
+            <exception cref="T:System.AggregateException">The exception that is thrown to contain an exception
+            thrown from one of the specified delegates.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when the 
+            the <see cref="T:System.Threading.CancellationTokenSource">CancellationTokenSource</see> associated with the 
+            the <see cref="T:System.Threading.CancellationToken">CancellationToken</see> in the 
+            <paramref name="parallelOptions"/> has been disposed.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.ParallelLoopResult">ParallelLoopResult</see> structure
+            that contains information on what portion of the loop completed.</returns>
+            <remarks>
+            <para>
+            The <see cref="T:System.Collections.Concurrent.Partitioner{TSource}">Partitioner</see> is used to retrieve 
+            the elements to be processed, in place of the original data source.  If the current element's 
+            index is desired, the source must be an <see cref="T:System.Collections.Concurrent.OrderablePartitioner">
+            OrderablePartitioner</see>.
+            </para>
+            <para>
+            The <paramref name="body"/> delegate is invoked once for each element in the <paramref name="source"/> 
+            Partitioner.  It is provided with the following parameters: the current element, 
+            a <see cref="T:System.Threading.Tasks.ParallelLoopState">ParallelLoopState</see> instance that may be 
+            used to break out of the loop prematurely, the current element's index (an Int64), and some local 
+            state that may be shared amongst iterations that execute on the same thread.
+            </para>
+            <para>
+            The <paramref name="localInit"/> delegate is invoked once for each thread that participates in the loop's 
+            execution and returns the initial local state for each of those threads.  These initial states are passed to the first
+            <paramref name="body"/> invocations on each thread.  Then, every subsequent body invocation returns a possibly 
+            modified state value that is passed to the next body invocation.  Finally, the last body invocation on each thread returns a state value 
+            that is passed to the <paramref name="localFinally"/> delegate.  The localFinally delegate is invoked once per thread to perform a final 
+            action on each thread's local state.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Parallel.ThrowIfReducableToSingleOCE(System.Collections.Generic.IEnumerable{System.Exception},System.Threading.CancellationToken)">
+            <summary>
+            Internal utility function that implements the OCE filtering behavior for all Parallel.* APIs.
+            Throws a single OperationCancelledException object with the token if the Exception collection only contains 
+            OperationCancelledExceptions with the given CancellationToken.
+            
+            </summary>
+            <param name="excCollection"> The exception collection to filter</param>
+            <param name="ct"> The CancellationToken expected on all inner exceptions</param>
+            <returns></returns>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopState">
+            <summary>
+            Enables iterations of <see cref="T:System.Threading.Tasks.Parallel"/> loops to interact with
+            other iterations.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState.Stop">
+            <summary>
+            Communicates that the <see cref="T:System.Threading.Tasks.Parallel"/> loop should cease execution at the system's earliest
+            convenience.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> method was previously called.  <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> and <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> may not be used in combination by iterations of the same loop.
+            </exception>
+            <remarks>
+            <para>
+            <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> may be used to communicate to the loop that no other iterations need be run.
+            For long-running iterations that may already be executing, <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> causes <see cref="P:System.Threading.Tasks.ParallelLoopState.IsStopped"/>
+            to return true for all other iterations of the loop, such that another iteration may check <see cref="P:System.Threading.Tasks.ParallelLoopState.IsStopped"/> and exit early if it's observed to be true.
+            </para>
+            <para>
+            <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> is typically employed in search-based algorithms, where once a result is found,
+            no other iterations need be executed.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState.Break">
+            <summary>
+            Communicates that the <see cref="T:System.Threading.Tasks.Parallel"/> loop should cease execution at the system's earliest
+            convenience of iterations beyond the current iteration.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> method was previously called. <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> and <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/>
+            may not be used in combination by iterations of the same loop.
+            </exception>
+            <remarks>
+            <para>
+            <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> may be used to communicate to the loop that no other iterations after the
+            current iteration need be run. For example, if <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> is called from the 100th
+            iteration of a for loop iterating in parallel from 0 to 1000, all iterations less than 100 should
+            still be run, but the iterations from 101 through to 1000 are not necessary.
+            </para>
+            <para>
+            For long-running iterations that may already be executing, <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> causes <see cref="P:System.Threading.Tasks.ParallelLoopState.LowestBreakIteration"/>
+            to be set to the current iteration's index if the current index is less than the current value of
+            <see cref="P:System.Threading.Tasks.ParallelLoopState.LowestBreakIteration"/>.
+            </para>
+            <para>
+            <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> is typically employed in search-based algorithms where an ordering is
+            present in the data source.
+            </para>
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.InternalShouldExitCurrentIteration">
+            <summary>
+            Internal/virtual support for ShouldExitCurrentIteration.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.ShouldExitCurrentIteration">
+            <summary>
+            Gets whether the current iteration of the loop should exit based
+            on requests made by this or other iterations.
+            </summary>
+            <remarks>
+            When an iteration of a loop calls <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> or <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/>, or
+            when one throws an exception, or when the loop is canceled, the <see cref="T:System.Threading.Tasks.Parallel"/> class will proactively
+            attempt to prohibit additional iterations of the loop from starting execution.
+            However, there may be cases where it is unable to prevent additional iterations from starting.
+            It may also be the case that a long-running iteration has already begun execution.  In such
+            cases, iterations may explicitly check the <see cref="P:System.Threading.Tasks.ParallelLoopState.ShouldExitCurrentIteration"/> property and
+            cease execution if the property returns true.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.IsStopped">
+            <summary>
+            Gets whether any iteration of the loop has called <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/>.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.IsExceptional">
+            <summary>
+            Gets whether any iteration of the loop has thrown an exception that went unhandled by that
+            iteration.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.InternalLowestBreakIteration">
+            <summary>
+            Internal/virtual support for LowestBreakIteration.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState.LowestBreakIteration">
+            <summary>
+            Gets the lowest iteration of the loop from which <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> was called.
+            </summary>
+            <remarks>
+            If no iteration of the loop called <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/>, this property will return null.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState32.#ctor(System.Threading.Tasks.ParallelLoopStateFlags32)">
+            <summary>
+            Internal constructor to ensure an instance isn't created by users.
+            </summary>
+            <param name="sharedParallelStateFlags">A flag shared among all threads participating
+            in the execution of a certain loop.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState32.InternalBreak">
+            <summary>
+            Communicates that parallel tasks should stop when they reach a specified iteration element.
+            (which is CurrentIteration of the caller).
+            </summary>
+            <exception cref="T:System.InvalidOperationException">Break() called after Stop().</exception>
+            <remarks>
+            This is shared with all other concurrent threads in the system which are participating in the
+            loop's execution. After calling Break(), no additional iterations will be executed on
+            the current thread, and other worker threads will execute once they get beyond the calling iteration.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState32.CurrentIteration">
+            <summary>
+            Tracks the current loop iteration for the owning task.
+            This is used to compute whether or not the task should
+            terminate early due to a Break() call.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState32.InternalShouldExitCurrentIteration">
+            <summary>
+            Returns true if we should be exiting from the current iteration
+            due to Stop(), Break() or exception.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState32.InternalLowestBreakIteration">
+            <summary>
+            Returns the lowest iteration at which Break() has been called, or
+            null if Break() has not yet been called.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopState64">
+            <summary>
+            Allows independent iterations of a parallel loop to interact with other iterations.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState64.#ctor(System.Threading.Tasks.ParallelLoopStateFlags64)">
+            <summary>
+            Internal constructor to ensure an instance isn't created by users.
+            </summary>
+            <param name="sharedParallelStateFlags">A flag shared among all threads participating
+            in the execution of a certain loop.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopState64.InternalBreak">
+            <summary>
+            Communicates that parallel tasks should stop when they reach a specified iteration element.
+            (which is CurrentIteration of the caller).
+            </summary>
+            <exception cref="T:System.InvalidOperationException">Break() called after Stop().</exception>
+            <remarks>
+            Atomically sets shared StoppedBroken flag to BROKEN, then atomically sets shared 
+            LowestBreakIteration to CurrentIteration, but only if CurrentIteration is less than 
+            LowestBreakIteration.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState64.CurrentIteration">
+            <summary>
+            Tracks the current loop iteration for the owning task.
+            This is used to compute whether or not the task should
+            terminate early due to a Break() call.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState64.InternalShouldExitCurrentIteration">
+            <summary>
+            Returns true if we should be exiting from the current iteration
+            due to Stop(), Break() or exception.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopState64.InternalLowestBreakIteration">
+            <summary>
+            Returns the lowest iteration at which Break() has been called, or
+            null if Break() has not yet been called.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopStateFlags">
+            <summary>
+            State information that is common between ParallelStateFlags class
+            and ParallelStateFlags64 class.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopStateFlags32">
+            <summary>
+            An internal class used to share accounting information in 32-bit versions
+            of For()/ForEach() loops.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopStateFlags32.ShouldExitLoop(System.Int32)">
+            <summary>
+            Lets the caller know whether or not to prematurely exit the For/ForEach loop.
+            If this returns true, then exit the loop.  Otherwise, keep going.
+            </summary>
+            <param name="CallerIteration">The caller's current iteration point
+            in the loop.</param>
+            <remarks>
+            The loop should exit on any one of the following conditions:
+              (1) Stop() has been called by one or more tasks.
+              (2) An exception has been raised by one or more tasks.
+              (3) Break() has been called by one or more tasks, and
+                  CallerIteration exceeds the (lowest) iteration at which 
+                  Break() was called.
+              (4) The loop was canceled.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopStateFlags64">
+            <summary>
+            An internal class used to share accounting information in 64-bit versions
+            of For()/ForEach() loops.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelLoopStateFlags64.ShouldExitLoop(System.Int64)">
+            <summary>
+            Lets the caller know whether or not to prematurely exit the For/ForEach loop.
+            If this returns true, then exit the loop.  Otherwise, keep going.
+            </summary>
+            <param name="CallerIteration">The caller's current iteration point
+            in the loop.</param>
+            <remarks>
+            The loop should exit on any one of the following conditions:
+              (1) Stop() has been called by one or more tasks.
+              (2) An exception has been raised by one or more tasks.
+              (3) Break() has been called by one or more tasks, and
+                  CallerIteration exceeds the (lowest) iteration at which 
+                  Break() was called.
+              (4) The loop has been canceled.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.ParallelLoopResult">
+            <summary>
+            Provides completion status on the execution of a <see cref="T:System.Threading.Tasks.Parallel"/> loop.
+            </summary>
+            <remarks>
+            If <see cref="P:System.Threading.Tasks.ParallelLoopResult.IsCompleted"/> returns true, then the loop ran to completion, such that all iterations
+            of the loop were executed. If <see cref="P:System.Threading.Tasks.ParallelLoopResult.IsCompleted"/> returns false and <see cref="P:System.Threading.Tasks.ParallelLoopResult.LowestBreakIteration"/> returns null, a call to <see cref="M:System.Threading.Tasks.ParallelLoopState.Stop"/> was used to end the loop prematurely. If <see cref="P:System.Threading.Tasks.ParallelLoopResult.IsCompleted"/> returns false and <see cref="P:System.Threading.Tasks.ParallelLoopResult.LowestBreakIteration"/> returns a non-null integral
+            value, <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> was used to end the loop prematurely.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopResult.IsCompleted">
+            <summary>
+            Gets whether the loop ran to completion, such that all iterations of the loop were executed
+            and the loop didn't receive a request to end prematurely.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ParallelLoopResult.LowestBreakIteration">
+            <summary>
+            Gets the index of the lowest iteration from which <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/>
+            was called.
+            </summary>
+            <remarks>
+            If <see cref="M:System.Threading.Tasks.ParallelLoopState.Break"/> was not employed, this property will
+            return null.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.Shared`1">
+            <summary>
+            Utility class for allocating structs as heap variables
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.IndexRange">
+            <summary>
+            Represents an index range
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.RangeWorker">
+            <summary>
+            The RangeWorker struct wraps the state needed by a task that services the parallel loop
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.RangeWorker.#ctor(System.Threading.Tasks.IndexRange[],System.Int32,System.Int64)">
+            <summary>
+            Initializes a RangeWorker struct
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.RangeWorker.FindNewWork(System.Int64@,System.Int64@)">
+            <summary>
+            Implements the core work search algorithm that will be used for this range worker. 
+            </summary> 
+            
+            Usage pattern is:
+               1) the thread associated with this rangeworker calls FindNewWork
+               2) if we return true, the worker uses the nFromInclusiveLocal and nToExclusiveLocal values
+                  to execute the sequential loop
+               3) if we return false it means there is no more work left. It's time to quit.        
+               
+        </member>
+        <member name="M:System.Threading.Tasks.RangeWorker.FindNewWork32(System.Int32@,System.Int32@)">
+            <summary>
+            32 bit integer version of FindNewWork. Assumes the ranges were initialized with 32 bit values.
+            </summary> 
+        </member>
+        <member name="T:System.Threading.Tasks.RangeManager">
+            <summary>
+            Represents the entire loop operation, keeping track of workers and ranges.
+            </summary>
+            
+            The usage pattern is:
+               1) The Parallel loop entry function (ForWorker) creates an instance of this class
+               2) Every thread joining to service the parallel loop calls RegisterWorker to grab a 
+                  RangeWorker struct to wrap the state it will need to find and execute work, 
+                  and they keep interacting with that struct until the end of the loop
+        </member>
+        <member name="M:System.Threading.Tasks.RangeManager.#ctor(System.Int64,System.Int64,System.Int64,System.Int32)">
+            <summary>
+            Initializes a RangeManager with the given loop parameters, and the desired number of outer ranges
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.RangeManager.RegisterNewWorker">
+            <summary>
+            The function that needs to be called by each new worker thread servicing the parallel loop
+            in order to get a RangeWorker struct that wraps the state for finding and executing indices
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.Task`1">
+            <summary>
+            Represents an asynchronous operation that produces a result at some time in the future.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by this <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </typeparam>
+            <remarks>
+            <para>
+            <see cref="T:System.Threading.Tasks.Task`1"/> instances may be created in a variety of ways. The most common approach is by
+            using the task's <see cref="P:System.Threading.Tasks.Task`1.Factory"/> property to retrieve a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance that can be used to create tasks for several
+            purposes. For example, to create a <see cref="T:System.Threading.Tasks.Task`1"/> that runs a function, the factory's StartNew
+            method may be used:
+            <code>
+            // C# 
+            var t = Task&lt;int&gt;.Factory.StartNew(() =&gt; GenerateResult());
+            - or -
+            var t = Task.Factory.StartNew(() =&gt; GenerateResult());
+            
+            ' Visual Basic 
+            Dim t = Task&lt;int&gt;.Factory.StartNew(Function() GenerateResult())
+            - or -
+            Dim t = Task.Factory.StartNew(Function() GenerateResult())
+            </code>
+            </para>
+            <para>
+            The <see cref="T:System.Threading.Tasks.Task`1"/> class also provides constructors that initialize the task but that do not
+            schedule it for execution. For performance reasons, the StartNew method should be the
+            preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation
+            and scheduling must be separated, the constructors may be used, and the task's 
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see>
+            method may then be used to schedule the task for execution at a later time.
+            </para>
+            <para>
+            All members of <see cref="T:System.Threading.Tasks.Task`1"/>, except for 
+            <see cref="M:System.Threading.Tasks.Task.Dispose">Dispose</see>, are thread-safe
+            and may be used from multiple threads concurrently.
+            </para>
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.Task">
+            <summary>
+            Represents an asynchronous operation.
+            </summary>
+            <remarks>
+            <para>
+            <see cref="T:System.Threading.Tasks.Task"/> instances may be created in a variety of ways. The most common approach is by
+            using the Task type's <see cref="P:System.Threading.Tasks.Task.Factory"/> property to retrieve a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance that can be used to create tasks for several
+            purposes. For example, to create a <see cref="T:System.Threading.Tasks.Task"/> that runs an action, the factory's StartNew
+            method may be used:
+            <code>
+            // C# 
+            var t = Task.Factory.StartNew(() =&gt; DoAction());
+            
+            ' Visual Basic 
+            Dim t = Task.Factory.StartNew(Function() DoAction())
+            </code>
+            </para>
+            <para>
+            The <see cref="T:System.Threading.Tasks.Task"/> class also provides constructors that initialize the Task but that do not
+            schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the
+            preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation
+            and scheduling must be separated, the constructors may be used, and the task's <see cref="M:System.Threading.Tasks.Task.Start"/>
+            method may then be used to schedule the task for execution at a later time.
+            </para>
+            <para>
+            All members of <see cref="T:System.Threading.Tasks.Task"/>, except for <see cref="M:System.Threading.Tasks.Task.Dispose"/>, are thread-safe
+            and may be used from multiple threads concurrently.
+            </para>
+            <para>
+            For operations that return values, the <see cref="T:System.Threading.Tasks.Task`1"/> class
+            should be used.
+            </para>
+            <para>
+            For developers implementing custom debuggers, several internal and private members of Task may be
+            useful (these may change from release to release). The Int32 m_taskId field serves as the backing
+            store for the <see cref="P:System.Threading.Tasks.Task.Id"/> property, however accessing this field directly from a debugger may be
+            more efficient than accessing the same value through the property's getter method (the
+            s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the
+            Int32 m_stateFlags field stores information about the current lifecycle stage of the Task,
+            information also accessible through the <see cref="P:System.Threading.Tasks.Task.Status"/> property. The m_action System.Object
+            field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the
+            async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the
+            InternalWait method serves a potential marker for when a Task is entering a wait operation.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#cctor">
+            <summary>
+            A type initializer that runs with the appropriate permissions.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the Task.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="action"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action,System.Threading.CancellationToken)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action and <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the Task.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            that will be assigned to the new Task.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="action"/> argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action and creation options.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the Task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action and creation options.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the Task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action{System.Object},System.Object)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action and state.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="state">An object representing data to be used by the action.</param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action{System.Object},System.Object,System.Threading.CancellationToken)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action, state, snd options.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="state">An object representing data to be used by the action.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new task.</param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action{System.Object},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action, state, snd options.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="state">An object representing data to be used by the action.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the Task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Action{System.Object},System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task"/> with the specified action, state, snd options.
+            </summary>
+            <param name="action">The delegate that represents the code to execute in the task.</param>
+            <param name="state">An object representing data to be used by the action.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the Task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="action"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.#ctor(System.Object,System.Object,System.Threading.Tasks.Task,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.InternalTaskOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            An internal constructor used by the factory methods on task and its descendent(s).
+            This variant does not capture the ExecutionContext; it is up to the caller to do that.
+            </summary>
+            <param name="action">An action to execute.</param>
+            <param name="state">Optional state to pass to the action.</param>
+            <param name="parent">Parent of Task.</param>
+            <param name="cancellationToken">A CancellationToken for the task.</param>
+            <param name="scheduler">A task scheduler under which the task will run.</param>
+            <param name="creationOptions">Options to control its execution.</param>
+            <param name="internalOptions">Internal options to control its execution</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.TaskConstructorCore(System.Object,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.InternalTaskOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Common logic used by the following internal ctors:
+                Task()
+                Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler)
+            
+            ASSUMES THAT m_creatingTask IS ALREADY SET.
+            
+            </summary>
+            <param name="action">Action for task to execute.</param>
+            <param name="state">Object to which to pass to action (may be null)</param>
+            <param name="scheduler">Task scheduler on which to run thread (only used by continuation tasks).</param>
+            <param name="cancellationToken">A CancellationToken for the Task.</param>
+            <param name="creationOptions">Options to customize behavior of Task.</param>
+            <param name="internalOptions">Internal options to customize behavior of Task.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.DeregisterCancellationCallback">
+            <summary>
+            Checks if we registered a CT callback during construction, and deregisters it. 
+            This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed
+            successfully or with an exception.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.PossiblyCaptureContext(System.Threading.StackCrawlMark2@)">
+            <summary>
+            Captures the ExecutionContext so long as flow isn't suppressed.
+            </summary>
+            <param name="stackMark">A stack crawl mark pointing to the frame of the caller.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.AddNewChild">
+            <summary>
+            Internal function that will be called by a new child task to add itself to 
+            the children list of the parent (this).
+            
+            Since a child task can only be created from the thread executing the action delegate
+            of this task, reentrancy is neither required nor supported. This should not be called from
+            anywhere other than the task construction/initialization codepaths.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Start">
+            <summary>
+            Starts the <see cref="T:System.Threading.Tasks.Task"/>, scheduling it for execution to the current <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>.
+            </summary>
+            <remarks>
+            A task may only be started and run only once.  Any attempts to schedule a task a second time
+            will result in an exception.
+            </remarks>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="T:System.Threading.Tasks.Task"/> is not in a valid state to be started. It may have already been started,
+            executed, or canceled, or it may have been created in a manner that doesn't support direct
+            scheduling.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> instance has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Start(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Starts the <see cref="T:System.Threading.Tasks.Task"/>, scheduling it for execution to the specified <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>.
+            </summary>
+            <remarks>
+            A task may only be started and run only once. Any attempts to schedule a task a second time will
+            result in an exception.
+            </remarks>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> with which to associate
+            and execute this task.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="T:System.Threading.Tasks.Task"/> is not in a valid state to be started. It may have already been started,
+            executed, or canceled, or it may have been created in a manner that doesn't support direct
+            scheduling.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> instance has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.RunSynchronously">
+            <summary>
+            Runs the <see cref="T:System.Threading.Tasks.Task"/> synchronously on the current <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>.
+            </summary>
+            <remarks>
+            <para>
+            A task may only be started and run only once. Any attempts to schedule a task a second time will
+            result in an exception.
+            </para>
+            <para>
+            Tasks executed with <see cref="M:System.Threading.Tasks.Task.RunSynchronously"/> will be associated with the current <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>.
+            </para>
+            <para>
+            If the target scheduler does not support running this Task on the current thread, the Task will
+            be scheduled for execution on the scheduler, and the current thread will block until the
+            Task has completed execution.
+            </para>
+            </remarks>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="T:System.Threading.Tasks.Task"/> is not in a valid state to be started. It may have already been started,
+            executed, or canceled, or it may have been created in a manner that doesn't support direct
+            scheduling.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> instance has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.RunSynchronously(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Runs the <see cref="T:System.Threading.Tasks.Task"/> synchronously on the <see cref="T:System.Threading.Tasks.TaskScheduler">scheduler</see> provided.
+            </summary>
+            <remarks>
+            <para>
+            A task may only be started and run only once. Any attempts to schedule a task a second time will
+            result in an exception.
+            </para>
+            <para>
+            If the target scheduler does not support running this Task on the current thread, the Task will
+            be scheduled for execution on the scheduler, and the current thread will block until the
+            Task has completed execution.
+            </para>
+            </remarks>
+            <exception cref="T:System.InvalidOperationException">
+            The <see cref="T:System.Threading.Tasks.Task"/> is not in a valid state to be started. It may have already been started,
+            executed, or canceled, or it may have been created in a manner that doesn't support direct
+            scheduling.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> instance has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="scheduler"/> parameter
+            is null.</exception>
+            <param name="scheduler">The scheduler on which to attempt to run this task inline.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ThrowIfDisposed">
+            <summary>
+            Throws an exception if the task has been disposed, and hence can no longer be accessed.
+            </summary>
+            <exception cref="T:System.ObjectDisposedException">The task has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.SetCompleted">
+            <summary>
+            Sets the internal completion event.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Dispose">
+            <summary>
+            Disposes the <see cref="T:System.Threading.Tasks.Task"/>, releasing all of its unmanaged resources.  
+            </summary>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.Tasks.Task"/>, this method is not thread-safe.
+            Also, <see cref="M:System.Threading.Tasks.Task.Dispose"/> may only be called on a <see cref="T:System.Threading.Tasks.Task"/> that is in one of
+            the final states: <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>,
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+            <exception cref="T:System.InvalidOperationException">
+            The exception that is thrown if the <see cref="T:System.Threading.Tasks.Task"/> is not in 
+            one of the final states: <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>,
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </exception>        
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Dispose(System.Boolean)">
+            <summary>
+            Disposes the <see cref="T:System.Threading.Tasks.Task"/>, releasing all of its unmanaged resources.  
+            </summary>
+            <param name="disposing">
+            A Boolean value that indicates whether this method is being called due to a call to <see cref="M:System.Threading.Tasks.Task.Dispose"/>.
+            </param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.Tasks.Task"/>, this method is not thread-safe.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ScheduleAndStart(System.Boolean)">
+            <summary>
+            Schedules the task for execution.
+            </summary>
+            <param name="needsProtection">If true, TASK_STATE_STARTED bit is turned on in
+            an atomic fashion, making sure that TASK_STATE_CANCELED does not get set
+            underneath us.  If false, TASK_STATE_STARTED bit is OR-ed right in.  This
+            allows us to streamline things a bit for StartNew(), where competing cancellations
+            are not a problem.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.AddException(System.Object)">
+            <summary>
+            Adds an exception to the list of exceptions this task has thrown.
+            </summary>
+            <param name="exceptionObject">An object representing either an Exception or a collection of Exceptions.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.GetExceptions(System.Boolean)">
+            <summary>
+            Returns a list of exceptions by aggregating the holder's contents. Or null if
+            no exceptions have been thrown.
+            </summary>
+            <param name="includeTaskCanceledExceptions">Whether to include a TCE if cancelled.</param>
+            <returns>An aggregate exception, or null if no exceptions have been caught.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ThrowIfExceptional(System.Boolean)">
+            <summary>
+            Throws an aggregate exception if the task contains exceptions. 
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.UpdateExceptionObservedStatus">
+            <summary>
+            Checks whether this is an attached task, and whether we are being called by the parent task.
+            And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that.
+            
+            This is meant to be used internally when throwing an exception, and when WaitAll is gathering 
+            exceptions for tasks it waited on. If this flag gets set, the implicit wait on children 
+            will skip exceptions to prevent duplication.
+            
+            This should only be called when this task has completed with an exception
+            
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Finish(System.Boolean)">
+             <summary>
+             Signals completion of this particular task.
+            
+             The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the
+             full execution of the user delegate. 
+             
+             If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to
+             a cancellation request, or because this task is a promise style Task). In this case, the steps
+             involving child tasks (i.e. WaitForChildren) will be skipped.
+             
+             </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.FinishStageTwo">
+            <summary>
+            FinishStageTwo is to be executed as soon as we known there are no more children to complete. 
+            It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit)
+                         ii) or on the thread that executed the last child.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.FinishStageThree">
+            <summary>
+            Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations.
+            This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic()
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ProcessChildCompletion(System.Threading.Tasks.Task)">
+            <summary>
+            This is called by children of this task when they are completed.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.AddExceptionsFromChildren">
+            <summary>
+            This is to be called just before the task does its final state transition. 
+            It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.FinishThreadAbortedTask(System.Boolean,System.Boolean)">
+            <summary>
+            Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException
+            This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath
+            such as inlined continuations
+            </summary>
+            <param name="bTAEAddedToExceptionHolder">
+            Indicates whether the ThreadAbortException was added to this task's exception holder. 
+            This should always be true except for the case of non-root self replicating task copies.
+            </param>
+            <param name="delegateRan">Whether the delegate was executed.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Execute">
+            <summary>
+            Executes the task. This method will only be called once, and handles bookeeping associated with
+            self-replicating tasks, in addition to performing necessary exception marshaling.
+            </summary>
+            <exception cref="T:System.ObjectDisposedException">The task has already been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.System#Threading#Tasks#IThreadPoolWorkItem#ExecuteWorkItem">
+            <summary>
+            IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it.
+            
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.System#Threading#Tasks#IThreadPoolWorkItem#MarkAborted(System.Threading.ThreadAbortException)">
+            <summary>
+            The ThreadPool calls this if a ThreadAbortException is thrown while trying to execute this workitem.  This may occur
+            before Task would otherwise be able to observe it.  
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ExecuteEntry(System.Boolean)">
+            <summary>
+            Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread.
+            Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. 
+            
+            </summary>
+            <param name="bPreventDoubleExecution"> Performs atomic updates to prevent double execution. Should only be set to true
+            in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. </param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.InnerInvoke">
+            <summary>
+            The actual code which invokes the body of the task. This can be overriden in derived types.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.InnerInvokeWithArg(System.Threading.Tasks.Task)">
+            <summary>
+            Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that
+            the Parallel Debugger can discover the actual task being invoked. 
+            Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the
+            childTask. And the debugger needs to discover the childTask, so we pass that down as an argument.
+            The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this
+            function appears on the callstack.
+            </summary>
+            <param name="childTask"></param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.HandleException(System.Exception)">
+            <summary>
+            Performs whatever handling is necessary for an unhandled exception. Normally
+            this just entails adding the exception to the holder object. 
+            </summary>
+            <param name="unhandledException">The exception that went unhandled.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Wait">
+            <summary>
+            Waits for the <see cref="T:System.Threading.Tasks.Task"/> to complete execution.
+            </summary>
+            <exception cref="T:System.AggregateException">
+            The <see cref="T:System.Threading.Tasks.Task"/> was canceled -or- an exception was thrown during
+            the execution of the <see cref="T:System.Threading.Tasks.Task"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Wait(System.TimeSpan)">
+            <summary>
+            Waits for the <see cref="T:System.Threading.Tasks.Task"/> to complete execution.
+            </summary>
+            <param name="timeout">
+            A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>
+            true if the <see cref="T:System.Threading.Tasks.Task"/> completed execution within the allotted time; otherwise, false.
+            </returns>
+            <exception cref="T:System.AggregateException">
+            The <see cref="T:System.Threading.Tasks.Task"/> was canceled -or- an exception was thrown during the execution of the <see cref="T:System.Threading.Tasks.Task"/>.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="timeout"/> is a negative number other than -1 milliseconds, which represents an
+            infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Wait(System.Threading.CancellationToken)">
+            <summary>
+            Waits for the <see cref="T:System.Threading.Tasks.Task"/> to complete execution.
+            </summary>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for the task to complete.
+            </param>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The <see cref="T:System.Threading.Tasks.Task"/> was canceled -or- an exception was thrown during the execution of the <see cref="T:System.Threading.Tasks.Task"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/>
+            has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Wait(System.Int32)">
+            <summary>
+            Waits for the <see cref="T:System.Threading.Tasks.Task"/> to complete execution.
+            </summary>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.</param>
+            <returns>true if the <see cref="T:System.Threading.Tasks.Task"/> completed execution within the allotted time; otherwise,
+            false.
+            </returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The <see cref="T:System.Threading.Tasks.Task"/> was canceled -or- an exception was thrown during the execution of the <see cref="T:System.Threading.Tasks.Task"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/>
+            has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.Wait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Waits for the <see cref="T:System.Threading.Tasks.Task"/> to complete execution.
+            </summary>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.
+            </param>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for the task to complete.
+            </param>
+            <returns>
+            true if the <see cref="T:System.Threading.Tasks.Task"/> completed execution within the allotted time; otherwise, false.
+            </returns>
+            <exception cref="T:System.AggregateException">
+            The <see cref="T:System.Threading.Tasks.Task"/> was canceled -or- an exception was thrown during the execution of the <see cref="T:System.Threading.Tasks.Task"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/>
+            has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.InternalWait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where 
+            the current context is known or cached.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.InternalCancel(System.Boolean)">
+            <summary>
+            Cancels the <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+            <param name="bCancelNonExecutingOnly"> Indiactes whether we should only cancel non-invoked tasks.
+            For the default scheduler this option will only be serviced through TryDequeue.
+            For custom schedulers we also attempt an atomic state transition.</param>
+            <returns>true if the task was successfully canceled; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Threading.Tasks.Task"/>
+            has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.SetCancellationAcknowledged">
+            <summary>
+            Sets the task's cancellation acknowledged flag.
+            </summary>    
+        </member>
+        <member name="M:System.Threading.Tasks.Task.FinishContinuations">
+            <summary>
+            Runs all of the continuations, as appropriate.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWithIsRightKind(System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Helper function to determine whether the current task is in the state desired by the
+            continuation kind under evaluation. Three possibilities exist: the task failed with
+            an unhandled exception (OnFailed), the task was canceled before running (OnAborted),
+            or the task completed successfully (OnCompletedSuccessfully).  Note that the last
+            one includes completing due to cancellation.
+            </summary>
+            <param name="options">The continuation options under evaluation.</param>
+            <returns>True if the continuation should be run given the task's current state.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith(System.Action{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith(System.Action{System.Threading.Tasks.Task},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken"> The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith(System.Action{System.Threading.Tasks.Task},System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task"/> completes.  When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith(System.Action{System.Threading.Tasks.Task},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed. If the continuation criteria specified through the <paramref name="continuationOptions"/> parameter are not met, the continuation task will be canceled
+            instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith(System.Action{System.Threading.Tasks.Task},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its
+            execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed. If the criteria specified through the <paramref name="continuationOptions"/> parameter
+            are not met, the continuation task will be canceled instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith``1(System.Func{System.Threading.Tasks.Task,``0})">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith``1(System.Func{System.Threading.Tasks.Task,``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith``1(System.Func{System.Threading.Tasks.Task,``0},System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task"/> completes.  When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith``1(System.Func{System.Threading.Tasks.Task,``0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed. If the continuation criteria specified through the <paramref name="continuationOptions"/> parameter are not met, the continuation task will be canceled
+            instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWith``1(System.Func{System.Threading.Tasks.Task,``0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task"/> completes.
+            </summary>
+            <typeparam name="TResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its
+            execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed. If the criteria specified through the <paramref name="continuationOptions"/> parameter
+            are not met, the continuation task will be canceled instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.CreationOptionsFromContinuationOptions(System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskCreationOptions@,System.Threading.Tasks.InternalTaskOptions@)">
+            <summary>
+            Converts TaskContinuationOptions to TaskCreationOptions, and also does
+            some validity checking along the way.
+            </summary>
+            <param name="continuationOptions">Incoming TaskContinuationOptions</param>
+            <param name="creationOptions">Outgoing TaskCreationOptions</param>
+            <param name="internalOptions">Outgoing InternalTaskOptions</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.ContinueWithCore(System.Threading.Tasks.Task,System.Threading.Tasks.TaskScheduler,System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Registers the continuation and possibly runs it (if the task is already finished).
+            </summary>
+            <param name="continuationTask">The continuation task itself.</param>
+            <param name="scheduler">TaskScheduler with which to associate continuation task.</param>
+            <param name="options">Restrictions on when the continuation becomes active.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[])">
+            <summary>
+            Waits for all of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            At least one of the <see cref="T:System.Threading.Tasks.Task"/> instances was canceled -or- an exception was thrown during
+            the execution of at least one of the <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.TimeSpan)">
+            <summary>
+            Waits for all of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <returns>
+            true if all of the <see cref="T:System.Threading.Tasks.Task"/> instances completed execution within the allotted time;
+            otherwise, false.
+            </returns>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="timeout">
+            A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            At least one of the <see cref="T:System.Threading.Tasks.Task"/> instances was canceled -or- an exception was thrown during
+            the execution of at least one of the <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="timeout"/> is a negative number other than -1 milliseconds, which represents an
+            infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32)">
+            <summary>
+            Waits for all of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <returns>
+            true if all of the <see cref="T:System.Threading.Tasks.Task"/> instances completed execution within the allotted time;
+            otherwise, false.
+            </returns>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.</param>
+            <param name="tasks">An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            At least one of the <see cref="T:System.Threading.Tasks.Task"/> instances was canceled -or- an exception was thrown during
+            the execution of at least one of the <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Threading.CancellationToken)">
+            <summary>
+            Waits for all of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <returns>
+            true if all of the <see cref="T:System.Threading.Tasks.Task"/> instances completed execution within the allotted time;
+            otherwise, false.
+            </returns>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for the tasks to complete.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            At least one of the <see cref="T:System.Threading.Tasks.Task"/> instances was canceled -or- an exception was thrown during
+            the execution of at least one of the <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Waits for all of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <returns>
+            true if all of the <see cref="T:System.Threading.Tasks.Task"/> instances completed execution within the allotted time;
+            otherwise, false.
+            </returns>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.
+            </param>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for the tasks to complete.
+            </param>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            At least one of the <see cref="T:System.Threading.Tasks.Task"/> instances was canceled -or- an exception was thrown during
+            the execution of at least one of the <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAllSTAAnd64Aware(System.Threading.WaitHandle[],System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Waits for a set of handles in a STA-aware way.  In other words, it will wait for each
+            of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx
+            can't do a true wait-all due to its hidden message queue event. This is not atomic,
+            of course, but we only wait on one-way (MRE) events anyway so this is OK.
+            </summary>
+            <param name="waitHandles">An array of wait handles to wait on.</param>
+            <param name="millisecondsTimeout">The timeout to use during waits.</param>
+            <param name="cancellationToken">The cancellationToken that enables a wait to be canceled.</param>
+            <returns>True if all waits succeeded, false if a timeout occurred.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.FastWaitAll(System.Threading.Tasks.Task[])">
+            <summary>
+            Internal WaitAll implementation which is meant to be used with small number of tasks,
+            optimized for Parallel.Invoke and other structured primitives.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.AddExceptionsForCompletedTask(System.Collections.Generic.List{System.Exception}@,System.Threading.Tasks.Task)">
+            <summary>
+            This internal function is only meant to be called by WaitAll()
+            If the completed task is canceled or it has other exceptions, here we will add those
+            into the passed in exception list (which will be lazily initialized here).
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[])">
+            <summary>
+            Waits for any of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <returns>The index of the completed task in the <paramref name="tasks"/> array argument.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.TimeSpan)">
+            <summary>
+            Waits for any of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="timeout">
+            A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>
+            The index of the completed task in the <paramref name="tasks"/> array argument, or -1 if the
+            timeout occurred.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="timeout"/> is a negative number other than -1 milliseconds, which represents an
+            infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Threading.CancellationToken)">
+            <summary>
+            Waits for any of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for a task to complete.
+            </param>
+            <returns>
+            The index of the completed task in the <paramref name="tasks"/> array argument.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Int32)">
+            <summary>
+            Waits for any of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.
+            </param>
+            <returns>
+            The index of the completed task in the <paramref name="tasks"/> array argument, or -1 if the
+            timeout occurred.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.WaitAny(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Waits for any of the provided <see cref="T:System.Threading.Tasks.Task"/> objects to complete execution.
+            </summary>
+            <param name="tasks">
+            An array of <see cref="T:System.Threading.Tasks.Task"/> instances on which to wait.
+            </param>
+            <param name="millisecondsTimeout">
+            The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to
+            wait indefinitely.
+            </param>
+            <param name="cancellationToken">
+            A <see cref="P:System.Threading.Tasks.Task.CancellationToken"/> to observe while waiting for a task to complete.
+            </param>
+            <returns>
+            The index of the completed task in the <paramref name="tasks"/> array argument, or -1 if the
+            timeout occurred.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="tasks"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="tasks"/> argument contains a null element.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="millisecondsTimeout"/> is a negative number other than -1, which represents an
+            infinite time-out.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The <paramref name="cancellationToken"/> was canceled.
+            </exception>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.Id">
+            <summary>
+            Gets a unique ID for this <see cref="T:System.Threading.Tasks.Task">Task</see> instance.
+            </summary>
+            <remarks>
+            Task IDs are assigned on-demand and do not necessarily represent the order in the which Task
+            instances were created.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.CurrentId">
+            <summary>
+            Returns the unique ID of the currently executing <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.InternalCurrent">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.Task">Task</see> instance currently executing, or
+            null if none exists.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.CurrentStackGuard">
+            <summary>
+            Gets the StackGuard object assigned to the current thread.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.Exception">
+            <summary>
+            Gets the <see cref="T:System.AggregateException">Exception</see> that caused the <see cref="T:System.Threading.Tasks.Task">Task</see> to end prematurely. If the <see cref="T:System.Threading.Tasks.Task">Task</see> completed successfully or has not yet thrown any
+            exceptions, this will return null.
+            </summary>
+            <remarks>
+            Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a
+            <see cref="T:System.AggregateException"/> in calls to <see cref="M:System.Threading.Tasks.Task.Wait">Wait</see>
+            or in accesses to the <see cref="P:System.Threading.Tasks.Task.Exception"/> property.  Any exceptions not observed by the time
+            the Task instance is garbage collected will be propagated on the finalizer thread.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task">Task</see>
+            has been disposed.
+            </exception>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.Status">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> of this Task. 
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsCanceled">
+            <summary>
+            Gets whether this <see cref="T:System.Threading.Tasks.Task">Task</see> instance has completed
+            execution due to being canceled.
+            </summary>
+            <remarks>
+            A <see cref="T:System.Threading.Tasks.Task">Task</see> will complete in Canceled state either if its <see cref="P:System.Threading.Tasks.Task.CancellationToken">CancellationToken</see> 
+            was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on 
+            its already signaled CancellationToken by throwing an 
+            <see cref="T:System.OperationCanceledException">OperationCanceledException</see> that bears the same 
+            <see cref="T:System.Threading.CancellationToken">CancellationToken</see>.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsCancellationRequested">
+            <summary>
+            Returns true if this task has a cancellation token and it was signaled.
+            To be used internally in execute entry codepaths.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.CancellationToken">
+            <summary>
+            This internal property provides access to the CancellationToken that was set on the task 
+            when it was constructed.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsCancellationAcknowledged">
+            <summary>
+            Gets whether this <see cref="T:System.Threading.Tasks.Task"/> threw an OperationCanceledException while its CancellationToken was signaled.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsCompleted">
+            <summary>
+            Gets whether this <see cref="T:System.Threading.Tasks.Task">Task</see> has completed.
+            </summary>
+            <remarks>
+            <see cref="P:System.Threading.Tasks.Task.IsCompleted"/> will return true when the Task is in one of the three
+            final states: <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>,
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsDisposed">
+            <summary>
+            Checks whether this task has been disposed.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.CreationOptions">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used
+            to create this task.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.System#IAsyncResult#AsyncWaitHandle">
+            <summary>
+            Gets a <see cref="T:System.Threading.WaitHandle"/> that can be used to wait for the task to
+            complete.
+            </summary>
+            <remarks>
+            Using the wait functionality provided by <see cref="M:System.Threading.Tasks.Task.Wait"/>
+            should be preferred over using <see cref="P:System.IAsyncResult.AsyncWaitHandle"/> for similar
+            functionality.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task"/> has been disposed.
+            </exception>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.AsyncState">
+            <summary>
+            Gets the state object supplied when the <see cref="T:System.Threading.Tasks.Task">Task</see> was created,
+            or null if none was supplied.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.System#IAsyncResult#CompletedSynchronously">
+            <summary>
+            Gets an indication of whether the asynchronous operation completed synchronously.
+            </summary>
+            <value>true if the asynchronous operation completed synchronously; otherwise, false.</value>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.ExecutingTaskScheduler">
+            <summary>
+            Provides access to the TaskScheduler responsible for executing this Task.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.Factory">
+            <summary>
+            Provides access to factory methods for creating <see cref="T:System.Threading.Tasks.Task"/> and <see cref="T:System.Threading.Tasks.Task`1"/> instances.
+            </summary>
+            <remarks>
+            The factory returned from <see cref="P:System.Threading.Tasks.Task.Factory"/> is a default instance
+            of <see cref="T:System.Threading.Tasks.TaskFactory"/>, as would result from using
+            the default constructor on TaskFactory.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.CompletedEvent">
+            <summary>
+            Provides an event that can be used to wait for completion.
+            Only called by Wait*(), which means that we really do need to instantiate a completion event.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsSelfReplicatingRoot">
+            <summary>
+            Determines whether this is the root task of a self replicating group.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsChildReplica">
+            <summary>
+            Determines whether the task is a replica itself.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.ExceptionRecorded">
+            <summary>
+            The property formerly known as IsFaulted.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsFaulted">
+            <summary>
+            Gets whether the <see cref="T:System.Threading.Tasks.Task"/> completed due to an unhandled exception.
+            </summary>
+            <remarks>
+            If <see cref="P:System.Threading.Tasks.Task.IsFaulted"/> is true, the Task's <see cref="P:System.Threading.Tasks.Task.Status"/> will be equal to
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">TaskStatus.Faulted</see>, and its
+            <see cref="P:System.Threading.Tasks.Task.Exception"/> property will be non-null.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsExceptionObservedByParent">
+            <summary>
+            Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set,
+            This will only be used by the implicit wait to prevent double throws
+            
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.Task.IsDelegateInvoked">
+            <summary>
+            Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.Task.TaskContinuation">
+            <summary>
+            A structure to hold continuation information.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.TaskContinuation.#ctor(System.Threading.Tasks.Task,System.Threading.Tasks.TaskScheduler,System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Constructs a new continuation structure.
+            </summary>
+            <param name="task">The task to be activated.</param>
+            <param name="options">The continuation options.</param>
+            <param name="scheduler">The scheduler to use for the continuation.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task.TaskContinuation.Run(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Invokes the continuation for the target completion task.
+            </summary>
+            <param name="completedTask">The completed task.</param>
+            <param name="bCanInlineContinuationTask">Whether the continuation can be inlined.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{`0})">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified function.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{`0},System.Threading.CancellationToken)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified function.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to be assigned to this task.</param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{`0},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified function and creation options.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified function and creation options.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{System.Object,`0},System.Object)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified function and state.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="state">An object representing data to be used by the action.</param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{System.Object,`0},System.Object,System.Threading.CancellationToken)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified action, state, and options.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="state">An object representing data to be used by the function.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to be assigned to the new task.</param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{System.Object,`0},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified action, state, and options.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="state">An object representing data to be used by the function.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{System.Object,`0},System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Initializes a new <see cref="T:System.Threading.Tasks.Task`1"/> with the specified action, state, and options.
+            </summary>
+            <param name="function">
+            The delegate that represents the code to execute in the task. When the function has completed,
+            the task's <see cref="P:System.Threading.Tasks.Task`1.Result"/> property will be set to return the result value of the function.
+            </param>
+            <param name="state">An object representing data to be used by the function.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to be assigned to the new task.</param>
+            <param name="creationOptions">
+            The <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions</see> used to
+            customize the task's behavior.
+            </param>
+            <exception cref="T:System.ArgumentException">
+            The <paramref name="function"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskCreationOptions"/>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{`0},System.Threading.Tasks.Task,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.InternalTaskOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a new future object.
+            </summary>
+            <param name="parent">The parent task for this future.</param>
+            <param name="valueSelector">A function that yields the future value.</param>
+            <param name="scheduler">The task scheduler which will be used to execute the future.</param>
+            <param name="cancellationToken">The CancellationToken for the task.</param>
+            <param name="creationOptions">Options to control the future's behavior.</param>
+            <param name="internalOptions">Internal options to control the future's behavior.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="creationOptions"/> argument specifies
+            a SelfReplicating <see cref="T:System.Threading.Tasks.Task`1"/>, which is illegal."/&gt;.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.#ctor(System.Func{System.Object,`0},System.Object,System.Threading.Tasks.Task,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.InternalTaskOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a new future object.
+            </summary>
+            <param name="parent">The parent task for this future.</param>
+            <param name="state">An object containing data to be used by the action; may be null.</param>
+            <param name="valueSelector">A function that yields the future value.</param>
+            <param name="cancellationToken">The CancellationToken for the task.</param>
+            <param name="scheduler">The task scheduler which will be used to execute the future.</param>
+            <param name="creationOptions">Options to control the future's behavior.</param>
+            <param name="internalOptions">Internal options to control the future's behavior.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="creationOptions"/> argument specifies
+            a SelfReplicating <see cref="T:System.Threading.Tasks.Task`1"/>, which is illegal."/&gt;.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.InvokeFuture(System.Object)">
+            <summary>
+            Evaluates the value selector of the Task which is passed in as an object and stores the result.
+            </summary>        
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith(System.Action{System.Threading.Tasks.Task{`0}})">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith(System.Action{System.Threading.Tasks.Task{`0}},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith(System.Action{System.Threading.Tasks.Task{`0}},System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith(System.Action{System.Threading.Tasks.Task{`0}},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed. If the continuation criteria specified through the <paramref name="continuationOptions"/> parameter are not met, the continuation task will be canceled
+            instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith(System.Action{System.Threading.Tasks.Task{`0}},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <param name="continuationAction">
+            An action to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its
+            execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task"/> will not be scheduled for execution until the current task has
+            completed. If the criteria specified through the <paramref name="continuationOptions"/> parameter
+            are not met, the continuation task will be canceled instead of scheduled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationAction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith``1(System.Func{System.Threading.Tasks.Task{`0},``0})">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <typeparam name="TNewResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current
+            task has completed, whether it completes due to running to completion successfully, faulting due
+            to an unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith``1(System.Func{System.Threading.Tasks.Task{`0},``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <typeparam name="TNewResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> that will be assigned to the new task.</param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current
+            task has completed, whether it completes due to running to completion successfully, faulting due
+            to an unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith``1(System.Func{System.Threading.Tasks.Task{`0},``0},System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <typeparam name="TNewResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes.  When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith``1(System.Func{System.Threading.Tasks.Task{`0},``0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <typeparam name="TNewResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be
+            passed the completed task as an argument.
+            </param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            <para>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current
+            task has completed, whether it completes due to running to completion successfully, faulting due
+            to an unhandled exception, or exiting out early due to being canceled.
+            </para>
+            <para>
+            The <paramref name="continuationFunction"/>, when executed, should return a <see cref="T:System.Threading.Tasks.Task`1"/>. This task's completion state will be transferred to the task returned
+            from the ContinueWith call.
+            </para>
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.Task`1.ContinueWith``1(System.Func{System.Threading.Tasks.Task{`0},``0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation that executes when the target <see cref="T:System.Threading.Tasks.Task`1"/> completes.
+            </summary>
+            <typeparam name="TNewResult">
+            The type of the result produced by the continuation.
+            </typeparam>
+            <param name="continuationFunction">
+            A function to run when the <see cref="T:System.Threading.Tasks.Task`1"/> completes. When run, the delegate will be passed as
+            an argument this completed task.
+            </param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="continuationOptions">
+            Options for when the continuation is scheduled and how it behaves. This includes criteria, such
+            as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">OnlyOnCanceled</see>, as
+            well as execution options, such as <see cref="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">ExecuteSynchronously</see>.
+            </param>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler"/> to associate with the continuation task and to use for its
+            execution.
+            </param>
+            <returns>A new continuation <see cref="T:System.Threading.Tasks.Task`1"/>.</returns>
+            <remarks>
+            <para>
+            The returned <see cref="T:System.Threading.Tasks.Task`1"/> will not be scheduled for execution until the current task has
+            completed, whether it completes due to running to completion successfully, faulting due to an
+            unhandled exception, or exiting out early due to being canceled.
+            </para>
+            <para>
+            The <paramref name="continuationFunction"/>, when executed, should return a <see cref="T:System.Threading.Tasks.Task`1"/>.
+            This task's completion state will be transferred to the task returned from the
+            ContinueWith call.
+            </para>
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="continuationFunction"/> argument is null.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="continuationOptions"/> argument specifies an invalid value for <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            The <paramref name="scheduler"/> argument is null.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.Tasks.Task`1"/> has been disposed.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="P:System.Threading.Tasks.Task`1.Result">
+            <summary>
+            Gets the result value of this <see cref="T:System.Threading.Tasks.Task`1"/>.
+            </summary>
+            <remarks>
+            The get accessor for this property ensures that the asynchronous operation is complete before
+            returning. Once the result of the computation is available, it is stored and will be returned
+            immediately on later calls to <see cref="P:System.Threading.Tasks.Task`1.Result"/>.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.Task`1.Factory">
+            <summary>
+            Provides access to factory methods for creating <see cref="T:System.Threading.Tasks.Task`1"/> instances.
+            </summary>
+            <remarks>
+            The factory returned from <see cref="P:System.Threading.Tasks.Task`1.Factory"/> is a default instance
+            of <see cref="T:System.Threading.Tasks.TaskFactory`1"/>, as would result from using
+            the default constructor on the factory type.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskFactory`1">
+            <summary>
+            Provides support for creating and scheduling
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task{TResult}</see> objects.
+            </summary>
+            <typeparam name="TResult">The type of the results that are available though 
+            the <see cref="T:System.Threading.Tasks.Task{TResult}">Task{TResult}</see> objects that are associated with 
+            the methods in this class.</typeparam>
+            <remarks>
+            <para>
+            There are many common patterns for which tasks are relevant. The <see cref="T:System.Threading.Tasks.TaskFactory`1"/>
+            class encodes some of these patterns into methods that pick up default settings, which are
+            configurable through its constructors.
+            </para>
+            <para>
+            A default instance of <see cref="T:System.Threading.Tasks.TaskFactory`1"/> is available through the
+            <see cref="P:System.Threading.Tasks.Task`1.Factory">Task{TResult}.Factory</see> property.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.#ctor">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with the default configuration.
+            </summary>
+            <remarks>
+            This constructor creates a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with a default configuration. The
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.#ctor(System.Threading.CancellationToken)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with the default configuration.
+            </summary>
+            <param name="cancellationToken">The default <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned 
+            to tasks created by this <see cref="T:System.Threading.Tasks.TaskFactory"/> unless another CancellationToken is explicitly specified 
+            while calling the factory methods.</param>
+            <remarks>
+            This constructor creates a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with a default configuration. The
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.#ctor(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with the specified configuration.
+            </summary>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler">
+            TaskScheduler</see> to use to schedule any tasks created with this TaskFactory{TResult}. A null value
+            indicates that the current TaskScheduler should be used.
+            </param>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to <paramref name="scheduler"/>, unless it's null, in which case the property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.#ctor(System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with the specified configuration.
+            </summary>
+            <param name="creationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskCreationOptions">
+            TaskCreationOptions</see> to use when creating tasks with this TaskFactory{TResult}.
+            </param>
+            <param name="continuationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> to use when creating continuation tasks with this TaskFactory{TResult}.
+            </param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The exception that is thrown when the
+            <paramref name="creationOptions"/> argument or the <paramref name="continuationOptions"/>
+            argument specifies an invalid value.
+            </exception>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to <paramref name="creationOptions"/>,
+            the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <paramref name="continuationOptions"/>, and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is initialized to the
+            current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.#ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory`1"/> instance with the specified configuration.
+            </summary>
+            <param name="cancellationToken">The default <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned 
+            to tasks created by this <see cref="T:System.Threading.Tasks.TaskFactory"/> unless another CancellationToken is explicitly specified 
+            while calling the factory methods.</param>
+            <param name="creationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskCreationOptions">
+            TaskCreationOptions</see> to use when creating tasks with this TaskFactory{TResult}.
+            </param>
+            <param name="continuationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> to use when creating continuation tasks with this TaskFactory{TResult}.
+            </param>
+            <param name="scheduler">
+            The default <see cref="T:System.Threading.Tasks.TaskScheduler">
+            TaskScheduler</see> to use to schedule any Tasks created with this TaskFactory{TResult}. A null value
+            indicates that TaskScheduler.Current should be used.
+            </param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The exception that is thrown when the
+            <paramref name="creationOptions"/> argument or the <paramref name="continuationOptions"/>
+            argumentspecifies an invalid value.
+            </exception>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to <paramref name="creationOptions"/>,
+            the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <paramref name="continuationOptions"/>, and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is initialized to
+            <paramref name="scheduler"/>, unless it's null, in which case the property is initialized to the
+            current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{`0})">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{`0},System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned to the new task.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{`0},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task{TResult}">
+            Task{TResult}</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{System.Object,`0},System.Object)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{System.Object,`0},System.Object,System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned to the new task.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{System.Object,`0},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.StartNew(System.Func{System.Object,`0},System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task{TResult}">
+            Task{TResult}</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync(System.IAsyncResult,System.Func{System.IAsyncResult,`0})">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync(System.IAsyncResult,System.Func{System.IAsyncResult,`0},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync(System.IAsyncResult,System.Func{System.IAsyncResult,`0},System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref name="asyncResult"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the task that executes the end method.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``1(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``1(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``2(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,``1,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``2(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,``1,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``3(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,``1,``2,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.FromAsync``3(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,`0},``0,``1,``2,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],`0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],`0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],`0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],`0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],`0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],`0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,`0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the <paramref
+            name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,`0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,`0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},`0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},`0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},`0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory`1.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},`0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory`1.CancellationToken">
+            <summary>
+            Gets the default <see cref="T:System.Threading.CancellationToken">CancellationToken</see> of this
+            TaskFactory.
+            </summary>
+            <remarks>
+            This property returns the default <see cref="P:System.Threading.Tasks.TaskFactory`1.CancellationToken"/> that will be assigned to all 
+            tasks created by this factory unless another CancellationToken value is explicitly specified 
+            during the call to the factory methods.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory`1.Scheduler">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> of this
+            TaskFactory{TResult}.
+            </summary>
+            <remarks>
+            This property returns the default scheduler for this factory.  It will be used to schedule all 
+            tasks unless another scheduler is explicitly specified during calls to this factory's methods.  
+            If null, <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see> 
+            will be used.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory`1.CreationOptions">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions
+            </see> value of this TaskFactory{TResult}.
+            </summary>
+            <remarks>
+            This property returns the default creation options for this factory.  They will be used to create all 
+            tasks unless other options are explicitly specified during calls to this factory's methods.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory`1.ContinuationOptions">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskContinuationOptions
+            </see> value of this TaskFactory{TResult}.
+            </summary>
+            <remarks>
+            This property returns the default continuation options for this factory.  They will be used to create 
+            all continuation tasks unless other options are explicitly specified during calls to this factory's methods.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskStatus">
+            <summary>
+            Represents the current stage in the lifecycle of a <see cref="T:System.Threading.Tasks.Task"/>.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.Created">
+            <summary> 
+            The task has been initialized but has not yet been scheduled.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.WaitingForActivation">
+            <summary> 
+            The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.WaitingToRun">
+            <summary>
+            The task has been scheduled for execution but has not yet begun executing.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.Running">
+            <summary>
+            The task is running but has not yet completed.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.WaitingForChildrenToComplete">
+            <summary>
+            The task has finished executing and is implicitly waiting for
+            attached child tasks to complete.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.RanToCompletion">
+            <summary>
+            The task completed execution successfully.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.Canceled">
+            <summary>
+            The task acknowledged cancellation by throwing an OperationCanceledException with its own CancellationToken
+            while the token was in signaled state, or the task's CancellationToken was already signaled before the
+            task started executing.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskStatus.Faulted">
+            <summary>
+            The task completed due to an unhandled exception.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ParallelForReplicaTask.SaveStateForNextReplica(System.Object)">
+             <summary>
+             In some cases a replica will want to quit prematurely (ie. before finishing a chunk of work it may have grabbed)
+             yet they will need the next replica to pick things up from where they left. This API is used to save such state.
+            
+             Calling it is also the only way to record a premature exit.
+             </summary>
+             <param name="stateForNextReplica"></param>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskCreationOptions">
+            <summary>
+            Specifies flags that control optional behavior for the creation and execution of tasks.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskCreationOptions.None">
+            <summary>
+            Specifies that the default behavior should be used.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskCreationOptions.PreferFairness">
+            <summary>
+            A hint to a <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> to schedule a
+            task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to
+            be run sooner, and tasks scheduled later will be more likely to be run later.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskCreationOptions.LongRunning">
+            <summary>
+            Specifies that a task will be a long-running, course-grained operation. It provides a hint to the
+            <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> that oversubscription may be
+            warranted. 
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskCreationOptions.AttachedToParent">
+            <summary>
+            Specifies that a task is attached to a parent in the task hierarchy.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.InternalTaskOptions">
+            <summary>
+            Task creation flags which are only used internally.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.InternalTaskOptions.None">
+            <summary> Specifies "No internal task options" </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.InternalTaskOptions.InternalOptionsMask">
+            <summary>Used to filter out internal vs. public task creation options.</summary>
+        </member>
+        <member name="F:System.Threading.Tasks.InternalTaskOptions.QueuedByRuntime">
+            <summary>Specifies that the task will be queued by the runtime before handing it over to the user. 
+            This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks.</summary>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskContinuationOptions">
+            <summary>
+            Specifies flags that control optional behavior for the creation and execution of continuation tasks.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.None">
+            <summary>
+            Default = "Continue on any, no task options, run asynchronously"
+            Specifies that the default behavior should be used.  Continuations, by default, will
+            be scheduled when the antecedent task completes, regardless of the task's final <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see>.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.PreferFairness">
+            <summary>
+            A hint to a <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> to schedule a
+            task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to
+            be run sooner, and tasks scheduled later will be more likely to be run later.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.LongRunning">
+            <summary>
+            Specifies that a task will be a long-running, course-grained operation.  It provides
+            a hint to the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> that
+            oversubscription may be warranted.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.AttachedToParent">
+            <summary>
+            Specifies that a task is attached to a parent in the task hierarchy.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.NotOnRanToCompletion">
+            <summary>
+            Specifies that the continuation task should not be scheduled if its antecedent ran to completion.
+            This option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.NotOnFaulted">
+            <summary>
+            Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled
+            exception. This option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.NotOnCanceled">
+            <summary>
+            Specifies that the continuation task should not be scheduled if its antecedent was canceled. This
+            option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion">
+            <summary>
+            Specifies that the continuation task should be scheduled only if its antecedent ran to
+            completion. This option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted">
+            <summary>
+            Specifies that the continuation task should be scheduled only if its antecedent threw an
+            unhandled exception. This option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.OnlyOnCanceled">
+            <summary>
+            Specifies that the continuation task should be scheduled only if its antecedent was canceled.
+            This option is not valid for multi-task continuations.
+            </summary>
+        </member>
+        <member name="F:System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously">
+            <summary>
+            Specifies that the continuation task should be executed synchronously. With this option
+            specified, the continuation will be run on the same thread that causes the antecedent task to
+            transition into its final state. If the antecedent is already complete when the continuation is
+            created, the continuation will run on the thread creating the continuation.  Only very
+            short-running continuations should be executed synchronously.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.StackGuard">
+            <summary>
+            Internal helper class to keep track of stack depth and decide whether we should inline or not.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.StackGuard.TryBeginInliningScope">
+            <summary>
+            This method needs to be called before attempting inline execution on the current thread. 
+            If false is returned, it means we are too close to the end of the stack and should give up inlining.
+            Each call to TryBeginInliningScope() that returns true must be matched with a 
+            call to EndInliningScope() regardless of whether inlining actually took place.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.StackGuard.EndInliningScope">
+            <summary>
+            This needs to be called once for each previous successful TryBeginInliningScope() call after
+            inlining related logic runs.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskCanceledException">
+            <summary>
+            Represents an exception used to communicate task cancellation.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCanceledException.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskCanceledException"/> class.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCanceledException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskCanceledException"/>
+            class with a specified error message.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCanceledException.#ctor(System.String,System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskCanceledException"/>
+            class with a specified error message and a reference to the inner exception that is the cause of
+            this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCanceledException.#ctor(System.Threading.Tasks.Task)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskCanceledException"/> class
+            with a reference to the <see cref="T:System.Threading.Tasks.Task"/> that has been canceled.
+            </summary>
+            <param name="task">A task that has been canceled.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCanceledException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskCanceledException"/>
+            class with serialized data.
+            </summary>
+            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
+            <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination. </param>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskCanceledException.Task">
+            <summary>
+            Gets the task associated with this exception.
+            </summary>
+            <remarks>
+            It is permissible for no Task to be associated with a 
+            <see cref="T:System.Threading.Tasks.TaskCanceledException"/>, in which case
+            this property will return null.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskExceptionHolder">
+            <summary>
+            An exception holder manages a list of exceptions for one particular task.
+            It offers the ability to aggregate, but more importantly, also offers intrinsic
+            support for propagating unhandled exceptions that are never observed. It does
+            this by aggregating and throwing if the holder is ever GC'd without the holder's
+            contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc).
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.#ctor(System.Threading.Tasks.Task)">
+            <summary>
+            Creates a new holder; it will be registered for finalization.
+            </summary>
+            <param name="task">The task this holder belongs to.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.Finalize">
+            <summary>
+            A finalizer that repropagates unhandled exceptions.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.Add(System.Object)">
+            <summary>
+            Add an exception to the internal list.  This will ensure the holder is
+            in the proper state (handled/unhandled) depending on the list's contents.
+            </summary>
+            <param name="exceptionObject">An exception object (either an Exception or an 
+            IEnumerable{Exception}) to add to the list.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.MarkAsUnhandled">
+            <summary>
+            A private helper method that ensures the holder is considered
+            unhandled, i.e. it is registered for finalization.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.MarkAsHandled(System.Boolean)">
+            <summary>
+            A private helper method that ensures the holder is considered
+            handled, i.e. it is not registered for finalization.
+            </summary>
+            <param name="calledFromFinalizer">Whether this is called from the finalizer thread.</param> 
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExceptionHolder.CreateExceptionObject(System.Boolean,System.Exception)">
+            <summary>
+            Allocates a new aggregate exception and adds the contents of the list to
+            it. By calling this method, the holder assumes exceptions to have been
+            "observed", such that the finalization check will be subsequently skipped.
+            </summary>
+            <param name="calledFromFinalizer">Whether this is being called from a finalizer.</param>
+            <param name="includeThisException">An extra exception to be included (optionally).</param>
+            <returns>The aggregate exception to throw.</returns>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskFactory">
+            <summary>
+            Provides support for creating and scheduling
+            <see cref="T:System.Threading.Tasks.Task">Tasks</see>.
+            </summary>
+            <remarks>
+            <para>
+            There are many common patterns for which tasks are relevant. The <see cref="T:System.Threading.Tasks.TaskFactory"/>
+            class encodes some of these patterns into methods that pick up default settings, which are
+            configurable through its constructors.
+            </para>
+            <para>
+            A default instance of <see cref="T:System.Threading.Tasks.TaskFactory"/> is available through the
+            <see cref="P:System.Threading.Tasks.Task.Factory">Task.Factory</see> property.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.#ctor">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with the default configuration.
+            </summary>
+            <remarks>
+            This constructor creates a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with a default configuration. The
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.#ctor(System.Threading.CancellationToken)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with the specified configuration.
+            </summary>
+            <param name="cancellationToken">The default <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned 
+            to tasks created by this <see cref="T:System.Threading.Tasks.TaskFactory"/> unless another CancellationToken is explicitly specified 
+            while calling the factory methods.</param>
+            <remarks>
+            This constructor creates a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with a default configuration. The
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.#ctor(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with the specified configuration.
+            </summary>
+            <param name="scheduler">
+            The <see cref="T:System.Threading.Tasks.TaskScheduler">
+            TaskScheduler</see> to use to schedule any tasks created with this TaskFactory. A null value
+            indicates that the current TaskScheduler should be used.
+            </param>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to
+            <see cref="F:System.Threading.Tasks.TaskCreationOptions.None">TaskCreationOptions.None</see>, the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <see cref="F:System.Threading.Tasks.TaskContinuationOptions.None">TaskContinuationOptions.None</see>,
+            and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is
+            initialized to <paramref name="scheduler"/>, unless it's null, in which case the property is
+            initialized to the current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.#ctor(System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with the specified configuration.
+            </summary>
+            <param name="creationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskCreationOptions">
+            TaskCreationOptions</see> to use when creating tasks with this TaskFactory.
+            </param>
+            <param name="continuationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> to use when creating continuation tasks with this TaskFactory.
+            </param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The exception that is thrown when the
+            <paramref name="creationOptions"/> argument or the <paramref name="continuationOptions"/>
+            argument specifies an invalid value.
+            </exception>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to <paramref name="creationOptions"/>,
+            the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <paramref name="continuationOptions"/>, and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is initialized to the
+            current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.#ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Initializes a <see cref="T:System.Threading.Tasks.TaskFactory"/> instance with the specified configuration.
+            </summary>
+            <param name="cancellationToken">The default <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned 
+            to tasks created by this <see cref="T:System.Threading.Tasks.TaskFactory"/> unless another CancellationToken is explicitly specified 
+            while calling the factory methods.</param>
+            <param name="creationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskCreationOptions">
+            TaskCreationOptions</see> to use when creating tasks with this TaskFactory.
+            </param>
+            <param name="continuationOptions">
+            The default <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> to use when creating continuation tasks with this TaskFactory.
+            </param>
+            <param name="scheduler">
+            The default <see cref="T:System.Threading.Tasks.TaskScheduler">
+            TaskScheduler</see> to use to schedule any Tasks created with this TaskFactory. A null value
+            indicates that TaskScheduler.Current should be used.
+            </param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The exception that is thrown when the
+            <paramref name="creationOptions"/> argument or the <paramref name="continuationOptions"/>
+            argumentspecifies an invalid value.
+            </exception>
+            <remarks>
+            With this constructor, the
+            <see cref="T:System.Threading.Tasks.TaskCreationOptions"/> property is initialized to <paramref name="creationOptions"/>,
+            the
+            <see cref="T:System.Threading.Tasks.TaskContinuationOptions"/> property is initialized to <paramref name="continuationOptions"/>, and the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> property is initialized to
+            <paramref name="scheduler"/>, unless it's null, in which case the property is initialized to the
+            current scheduler (see <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see>).
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/> 
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors 
+            and then calling 
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.  However,
+            unless creation and scheduling must be separated, StartNew is the recommended
+            approach for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action,System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new task.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/> 
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors 
+            and then calling 
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.  However,
+            unless creation and scheduling must be separated, StartNew is the recommended
+            approach for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task">Task.</see></param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new <see cref="T:System.Threading.Tasks.Task"/></param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task">Task.</see></param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action{System.Object},System.Object)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="state">An object containing data to be used by the <paramref name="action"/>
+            delegate.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action{System.Object},System.Object,System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="state">An object containing data to be used by the <paramref name="action"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new <see cref="T:System.Threading.Tasks.Task"/></param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action{System.Object},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="state">An object containing data to be used by the <paramref name="action"/>
+            delegate.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task">Task.</see></param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew(System.Action{System.Object},System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task">Task</see>.
+            </summary>
+            <param name="action">The action delegate to execute asynchronously.</param>
+            <param name="state">An object containing data to be used by the <paramref name="action"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task">Task.</see></param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="action"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
+            then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{``0})">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new <see cref="T:System.Threading.Tasks.Task"/></param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{``0},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{``0},System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task{TResult}">
+            Task{TResult}</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{System.Object,``0},System.Object)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{System.Object,``0},System.Object,System.Threading.CancellationToken)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new <see cref="T:System.Threading.Tasks.Task"/></param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{System.Object,``0},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.StartNew``1(System.Func{System.Object,``0},System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates and starts a <see cref="T:System.Threading.Tasks.Task{TResult}"/>.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="function">A function delegate that returns the future result to be available through
+            the <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="function"/>
+            delegate.</param>
+            <param name="cancellationToken">The <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to the new task.</param>
+            <param name="creationOptions">A TaskCreationOptions value that controls the behavior of the
+            created
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created <see cref="T:System.Threading.Tasks.Task{TResult}">
+            Task{TResult}</see>.</param>
+            <returns>The started <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="function"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the <paramref name="scheduler"/>
+            argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            Calling StartNew is functionally equivalent to creating a <see cref="T:System.Threading.Tasks.Task`1"/> using one
+            of its constructors and then calling
+            <see cref="M:System.Threading.Tasks.Task.Start">Start</see> to schedule it for execution.
+            However, unless creation and scheduling must be separated, StartNew is the recommended approach
+            for both simplicity and performance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync(System.IAsyncResult,System.Action{System.IAsyncResult})">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that executes an end method action
+            when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The action delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
+            operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync(System.IAsyncResult,System.Action{System.IAsyncResult},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that executes an end method action
+            when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The action delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
+            operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync(System.IAsyncResult,System.Action{System.IAsyncResult},System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that executes an end method action
+            when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The action delegate that processes the completed <paramref name="asyncResult"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the task that executes the end method.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the asynchronous
+            operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``2(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,``1,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``2(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,``1,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``3(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,``1,``2,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``3(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Action{System.IAsyncResult},``0,``1,``2,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task">Task</see> that represents a pair of begin
+            and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the
+            asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.IAsyncResult,System.Func{System.IAsyncResult,``0})">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.IAsyncResult,System.Func{System.IAsyncResult,``0},System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref
+            name="asyncResult"/>.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.IAsyncResult,System.Func{System.IAsyncResult,``0},System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that executes an end
+            method function when a specified <see cref="T:System.IAsyncResult">IAsyncResult</see> completes.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="asyncResult">The IAsyncResult whose completion should trigger the processing of the
+            <paramref name="endMethod"/>.</param>
+            <param name="endMethod">The function delegate that processes the completed <paramref name="asyncResult"/>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the task that executes the end method.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="asyncResult"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>A <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents the
+            asynchronous operation.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``0},System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``1(System.Func{System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``0},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``2(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``1},``0,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``2(System.Func{``0,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``1},``0,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``3(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``2},``0,``1,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``3(System.Func{``0,``1,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``2},``0,``1,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``4(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``3},``0,``1,``2,System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.FromAsync``4(System.Func_{``0,``1,``2,System.AsyncCallback,System.Object,System.IAsyncResult},System.Func{System.IAsyncResult,``3},``0,``1,``2,System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that represents a pair of
+            begin and end methods that conform to the Asynchronous Programming Model pattern.
+            </summary>
+            <typeparam name="TArg1">The type of the first argument passed to the <paramref
+            name="beginMethod"/> delegate.</typeparam>
+            <typeparam name="TArg2">The type of the second argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TArg3">The type of the third argument passed to <paramref name="beginMethod"/>
+            delegate.</typeparam>
+            <typeparam name="TResult">The type of the result available through the
+            <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.
+            </typeparam>
+            <param name="beginMethod">The delegate that begins the asynchronous operation.</param>
+            <param name="endMethod">The delegate that ends the asynchronous operation.</param>
+            <param name="arg1">The first argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg2">The second argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="arg3">The third argument passed to the <paramref name="beginMethod"/>
+            delegate.</param>
+            <param name="creationOptions">The TaskCreationOptions value that controls the behavior of the
+            created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="state">An object containing data to be used by the <paramref name="beginMethod"/>
+            delegate.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="beginMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="endMethod"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="creationOptions"/> argument specifies an invalid TaskCreationOptions
+            value.</exception>
+            <returns>The created <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see> that
+            represents the asynchronous operation.</returns>
+            <remarks>
+            This method throws any exceptions thrown by the <paramref name="beginMethod"/>.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.CheckFromAsyncOptions(System.Threading.Tasks.TaskCreationOptions,System.Boolean)">
+            <summary>
+            Check validity of options passed to FromAsync method
+            </summary>
+            <param name="creationOptions">The options to be validated.</param>
+            <param name="hasBeginMethod">determines type of FromAsync method that called this method</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task[]})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task[]},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task[]},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task[]},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}[]})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}[]},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see> 
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in 
+            the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the 
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the 
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}[]},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}[]},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationAction">The action delegate to execute when all tasks in the <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],``0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref
+            name="continuationFunction"/>
+            delegate and associated with the created <see
+            cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],``0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task[],``0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],``1})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref
+            name="continuationFunction"/>
+            delegate and associated with the created <see
+            cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],``1},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],``1},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAll``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0}[],``1},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of a set of provided Tasks.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue.</param>
+            <param name="continuationFunction">The function delegate to execute when all tasks in the
+            <paramref name="tasks"/> array have completed.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAll.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the <paramref
+            name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny(System.Threading.Tasks.Task[],System.Action{System.Threading.Tasks.Task},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,``0})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref
+            name="continuationFunction"/>
+            delegate and associated with the created <see
+            cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,``0},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,``0},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task[],System.Func{System.Threading.Tasks.Task,``0},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},``1})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref
+            name="continuationFunction"/>
+            delegate and associated with the created <see
+            cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},``1},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},``1},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``2(System.Threading.Tasks.Task{``0}[],System.Func{System.Threading.Tasks.Task{``0},``1},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TResult">The type of the result that is returned by the <paramref name="continuationFunction"/>
+            delegate and associated with the created <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</typeparam>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationFunction">The function delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationFunction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}})">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}},System.Threading.Tasks.TaskContinuationOptions)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskFactory.ContinueWhenAny``1(System.Threading.Tasks.Task{``0}[],System.Action{System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Creates a continuation <see cref="T:System.Threading.Tasks.Task">Task</see>
+            that will be started upon the completion of any Task in the provided set.
+            </summary>
+            <typeparam name="TAntecedentResult">The type of the result of the antecedent <paramref name="tasks"/>.</typeparam>
+            <param name="tasks">The array of tasks from which to continue when one task completes.</param>
+            <param name="continuationAction">The action delegate to execute when one task in the
+            <paramref name="tasks"/> array completes.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken">CancellationToken</see> 
+            that will be assigned to the new continuation task.</param>
+            <param name="continuationOptions">The <see cref="T:System.Threading.Tasks.TaskContinuationOptions">
+            TaskContinuationOptions</see> value that controls the behavior of
+            the created continuation <see cref="T:System.Threading.Tasks.Task">Task</see>.</param>
+            <param name="scheduler">The <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            that is used to schedule the created continuation <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>The new continuation <see cref="T:System.Threading.Tasks.Task"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="tasks"/> array is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="continuationAction"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown when the
+            <paramref name="scheduler"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array contains a null value.</exception>
+            <exception cref="T:System.ArgumentException">The exception that is thrown when the
+            <paramref name="tasks"/> array is empty.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The exception that is thrown when the
+            <paramref name="continuationOptions"/> argument specifies an invalid TaskContinuationOptions
+            value.</exception>
+            <exception cref="T:System.ObjectDisposedException">The exception that is thrown when one 
+            of the elements in the <paramref name="tasks"/> array has been disposed.</exception>
+            <exception cref="T:System.ObjectDisposedException">The provided <see cref="T:System.Threading.CancellationToken">CancellationToken</see>
+            has already been disposed.
+            </exception>
+            <remarks>
+            The NotOn* and OnlyOn* <see cref="T:System.Threading.Tasks.TaskContinuationOptions">TaskContinuationOptions</see>, 
+            which constrain for which <see cref="T:System.Threading.Tasks.TaskStatus">TaskStatus</see> states a continuation 
+            will be executed, are illegal with ContinueWhenAny.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory.CancellationToken">
+            <summary>
+            Gets the default <see cref="T:System.Threading.CancellationToken">CancellationToken</see> of this
+            TaskFactory.
+            </summary>
+            <remarks>
+            This property returns the default <see cref="P:System.Threading.Tasks.TaskFactory.CancellationToken"/> that will be assigned to all 
+            tasks created by this factory unless another CancellationToken value is explicitly specified 
+            during the call to the factory methods.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory.Scheduler">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> of this
+            TaskFactory.
+            </summary>
+            <remarks>
+            This property returns the default scheduler for this factory.  It will be used to schedule all 
+            tasks unless another scheduler is explicitly specified during calls to this factory's methods.  
+            If null, <see cref="P:System.Threading.Tasks.TaskScheduler.Current">TaskScheduler.Current</see> 
+            will be used.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory.CreationOptions">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskCreationOptions
+            </see> value of this TaskFactory.
+            </summary>
+            <remarks>
+            This property returns the default creation options for this factory.  They will be used to create all 
+            tasks unless other options are explicitly specified during calls to this factory's methods.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskFactory.ContinuationOptions">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskCreationOptions">TaskContinuationOptions
+            </see> value of this TaskFactory.
+            </summary>
+            <remarks>
+            This property returns the default continuation options for this factory.  They will be used to create 
+            all continuation tasks unless other options are explicitly specified during calls to this factory's methods.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskCompletionSource`1">
+            <summary>
+            Represents the producer side of a <see cref="T:System.Threading.Tasks.Task{TResult}"/> unbound to a
+            delegate, providing access to the consumer side through the <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> property.
+            </summary>
+            <remarks>
+            <para>
+            It is often the case that a <see cref="T:System.Threading.Tasks.Task{TResult}"/> is desired to
+            represent another asynchronous operation.
+            <see cref="T:System.Threading.Tasks.TaskCompletionSource`1">TaskCompletionSource</see> is provided for this purpose. It enables
+            the creation of a task that can be handed out to consumers, and those consumers can use the members
+            of the task as they would any other. However, unlike most tasks, the state of a task created by a
+            TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the
+            completion of the external asynchronous operation to be propagated to the underlying Task. The
+            separation also ensures that consumers are not able to transition the state without access to the
+            corresponding TaskCompletionSource.
+            </para>
+            <para>
+            All members of <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/> are thread-safe
+            and may be used from multiple threads concurrently.
+            </para>
+            </remarks>
+            <typeparam name="TResult">The type of the result value assocatied with this <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>.</typeparam>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.#ctor">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.#ctor(System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>
+            with the specified options.
+            </summary>
+            <remarks>
+            The <see cref="T:System.Threading.Tasks.Task{TResult}"/> created
+            by this instance and accessible through its <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> property
+            will be instantiated using the specified <paramref name="creationOptions"/>.
+            </remarks>
+            <param name="creationOptions">The options to use when creating the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> represent options invalid for use
+            with a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.#ctor(System.Object)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>
+            with the specified state.
+            </summary>
+            <param name="state">The state to use as the underlying 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>'s AsyncState.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.#ctor(System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/> with
+            the specified state and options.
+            </summary>
+            <param name="creationOptions">The options to use when creating the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <param name="state">The state to use as the underlying 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/>'s AsyncState.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            The <paramref name="creationOptions"/> represent options invalid for use
+            with a <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.TrySetException(System.Exception)">
+            <summary>
+            Attempts to transition the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>
+            state.
+            </summary>
+            <param name="exception">The exception to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>True if the operation was successful; otherwise, false.</returns>
+            <remarks>This operation will return false if the 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="exception"/> argument is null.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.TrySetException(System.Collections.Generic.IEnumerable{System.Exception})">
+            <summary>
+            Attempts to transition the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>
+            state.
+            </summary>
+            <param name="exceptions">The collection of exceptions to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>True if the operation was successful; otherwise, false.</returns>
+            <remarks>This operation will return false if the 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="exceptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">There are one or more null elements in <paramref name="exceptions"/>.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="exceptions"/> collection is empty.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.SetException(System.Exception)">
+            <summary>
+            Transitions the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>
+            state.
+            </summary>
+            <param name="exception">The exception to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="exception"/> argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The underlying <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.SetException(System.Collections.Generic.IEnumerable{System.Exception})">
+            <summary>
+            Transitions the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>
+            state.
+            </summary>
+            <param name="exceptions">The collection of exceptions to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="exceptions"/> argument is null.</exception>
+            <exception cref="T:System.ArgumentException">There are one or more null elements in <paramref name="exceptions"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The underlying <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.TrySetResult(`0)">
+            <summary>
+            Attempts to transition the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>
+            state.
+            </summary>
+            <param name="result">The result value to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <returns>True if the operation was successful; otherwise, false.</returns>
+            <remarks>This operation will return false if the 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.SetResult(`0)">
+            <summary>
+            Transitions the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>
+            state.
+            </summary>
+            <param name="result">The result value to bind to this <see cref="T:System.Threading.Tasks.Task{TResult}"/>.</param>
+            <exception cref="T:System.InvalidOperationException">
+            The underlying <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.SetCanceled">
+            <summary>
+            Transitions the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>
+            state.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The underlying <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskCompletionSource`1.TrySetCanceled">
+            <summary>
+            Attempts to transition the underlying
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> into the 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>
+            state.
+            </summary>
+            <returns>True if the operation was successful; otherwise, false.</returns>
+            <remarks>This operation will return false if the 
+            <see cref="T:System.Threading.Tasks.Task{TResult}"/> is already in one
+            of the three final states:
+            <see cref="F:System.Threading.Tasks.TaskStatus.RanToCompletion">RanToCompletion</see>, 
+            <see cref="F:System.Threading.Tasks.TaskStatus.Faulted">Faulted</see>, or
+            <see cref="F:System.Threading.Tasks.TaskStatus.Canceled">Canceled</see>.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="P:System.Threading.Tasks.TaskCompletionSource`1.Task"/> was disposed.</exception>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskCompletionSource`1.Task">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.Task{TResult}"/> created
+            by this <see cref="T:System.Threading.Tasks.TaskCompletionSource`1"/>.
+            </summary>
+            <remarks>
+            This property enables a consumer access to the <see cref="T:System.Threading.Tasks.Task{TResult}"/> that is controlled by this instance.
+            The <see cref="M:System.Threading.Tasks.TaskCompletionSource`1.SetResult(`0)"/>, <see cref="M:System.Threading.Tasks.TaskCompletionSource`1.SetException(System.Exception)"/>,
+            <see cref="M:System.Threading.Tasks.TaskCompletionSource`1.SetException(System.Collections.Generic.IEnumerable{System.Exception})"/>, and <see cref="M:System.Threading.Tasks.TaskCompletionSource`1.SetCanceled"/>
+            methods (and their "Try" variants) on this instance all result in the relevant state
+            transitions on this underlying Task.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskScheduler">
+            <summary>
+            Represents an abstract scheduler for tasks.
+            </summary>
+            <remarks>
+            <para>
+            <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> acts as the extension point for all 
+            pluggable scheduling logic.  This includes mechanisms such as how to schedule a task for execution, and
+            how scheduled tasks should be exposed to debuggers.
+            </para>
+            <para>
+            All members of the abstract <see cref="T:System.Threading.Tasks.TaskScheduler"/> type are thread-safe
+            and may be used from multiple threads concurrently.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.QueueTask(System.Threading.Tasks.Task)">
+            <summary>
+            Queues a <see cref="T:System.Threading.Tasks.Task">Task</see> to the scheduler.
+            </summary>
+            <remarks>
+            <para>
+            A class derived from <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>  
+            implements this method to accept tasks being scheduled on the scheduler.
+            A typical implementation would store the task in an internal data structure, which would
+            be serviced by threads that would execute those tasks at some time in the future.
+            </para>
+            <para>
+            This method is only meant to be called by the .NET Framework and
+            should not be called directly by the derived class. This is necessary 
+            for maintaining the consistency of the system.
+            </para>
+            </remarks>
+            <param name="task">The <see cref="T:System.Threading.Tasks.Task">Task</see> to be queued.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="task"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Determines whether the provided <see cref="T:System.Threading.Tasks.Task">Task</see>
+            can be executed synchronously in this call, and if it can, executes it.
+            </summary>
+            <remarks>
+            <para>
+            A class derived from <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> implements this function to
+            support inline execution of a task on a thread that initiates a wait on that task object. Inline
+            execution is optional, and the request may be rejected by returning false. However, better
+            scalability typically results the more tasks that can be inlined, and in fact a scheduler that
+            inlines too little may be prone to deadlocks. A proper implementation should ensure that a
+            request executing under the policies guaranteed by the scheduler can successfully inline. For
+            example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that
+            thread should succeed.
+            </para>
+            <para>
+            If a scheduler decides to perform the inline execution, it should do so by calling to the base
+            TaskScheduler's
+            <see cref="M:System.Threading.Tasks.TaskScheduler.TryExecuteTask(System.Threading.Tasks.Task)">TryExecuteTask</see> method with the provided task object, propagating
+            the return value. It may also be appropriate for the scheduler to remove an inlined task from its
+            internal data structures if it decides to honor the inlining request. Note, however, that under
+            some circumstances a scheduler may be asked to inline a task that was not previously provided to
+            it with the <see cref="M:System.Threading.Tasks.TaskScheduler.QueueTask(System.Threading.Tasks.Task)"/> method.
+            </para>
+            <para>
+            The derived scheduler is responsible for making sure that the calling thread is suitable for
+            executing the given task as far as its own scheduling and execution policies are concerned.
+            </para>
+            </remarks>
+            <param name="task">The <see cref="T:System.Threading.Tasks.Task">Task</see> to be
+            executed.</param>
+            <param name="taskWasPreviouslyQueued">A Boolean denoting whether or not task has previously been
+            queued. If this parameter is True, then the task may have been previously queued (scheduled); if
+            False, then the task is known not to have been queued, and this call is being made in order to
+            execute the task inline without queueing it.</param>
+            <returns>A Boolean value indicating whether the task was executed inline.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="task"/> argument is
+            null.</exception>
+            <exception cref="T:System.InvalidOperationException">The <paramref name="task"/> was already
+            executed.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.GetScheduledTasks">
+            <summary>
+            Generates an enumerable of <see cref="T:System.Threading.Tasks.Task">Task</see> instances
+            currently queued to the scheduler waiting to be executed.
+            </summary>
+            <remarks>
+            <para>
+            A class derived from <see cref="T:System.Threading.Tasks.TaskScheduler"/> implements this method in order to support
+            integration with debuggers. This method will only be invoked by the .NET Framework when the
+            debugger requests access to the data. The enumerable returned will be traversed by debugging
+            utilities to access the tasks currently queued to this scheduler, enabling the debugger to
+            provide a representation of this information in the user interface.
+            </para>
+            <para>
+            It is important to note that, when this method is called, all other threads in the process will
+            be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to
+            blocking. If synchronization is necessary, the method should prefer to throw a <see cref="T:System.NotSupportedException"/>
+            than to block, which could cause a debugger to experience delays. Additionally, this method and
+            the enumerable returned must not modify any globally visible state.
+            </para>
+            <para>
+            The returned enumerable should never be null. If there are currently no queued tasks, an empty
+            enumerable should be returned instead.
+            </para>
+            <para>
+            For developers implementing a custom debugger, this method shouldn't be called directly, but
+            rather this functionality should be accessed through the internal wrapper method
+            GetScheduledTasksForDebugger:
+            <c>internal Task[] GetScheduledTasksForDebugger()</c>. This method returns an array of tasks,
+            rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use
+            another internal method: <c>internal static TaskScheduler[] GetTaskSchedulersForDebugger()</c>.
+            This static method returns an array of all active TaskScheduler instances.
+            GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve
+            the list of scheduled tasks for each.
+            </para>
+            </remarks>
+            <returns>An enumerable that allows traversal of tasks currently queued to this scheduler.
+            </returns>
+            <exception cref="T:System.NotSupportedException">
+            This scheduler is unable to generate a list of queued tasks at this time.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.GetThreadStatics">
+            <summary>
+            Retrieves some thread static state that can be cached and passed to multiple
+            TryRunInline calls, avoiding superflous TLS fetches.
+            </summary>
+            <returns>A bag of TLS state (or null if none exists).</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.TryRunInline(System.Threading.Tasks.Task,System.Boolean,System.Object)">
+            <summary>
+            Attempts to execute the target task synchronously.
+            </summary>
+            <param name="task">The task to run.</param>
+            <param name="taskWasPreviouslyQueued">True if the task may have been previously queued,
+            false if the task was absolutely not previously queued.</param>
+            <param name="threadStatics">The state retrieved from GetThreadStatics</param>
+            <returns>True if it ran, false otherwise.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.TryDequeue(System.Threading.Tasks.Task)">
+            <summary>
+            Attempts to dequeue a <see cref="T:System.Threading.Tasks.Task">Task</see> that was previously queued to
+            this scheduler.
+            </summary>
+            <param name="task">The <see cref="T:System.Threading.Tasks.Task">Task</see> to be dequeued.</param>
+            <returns>A Boolean denoting whether the <paramref name="task"/> argument was successfully dequeued.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="task"/> argument is null.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.NotifyWorkItemProgress">
+            <summary>
+            Notifies the scheduler that a work item has made progress.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.#ctor">
+            <summary>
+            Initializes the <see cref="T:System.Threading.Tasks.TaskScheduler"/>.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.Finalize">
+            <summary>
+            Frees all resources associated with this scheduler.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext">
+            <summary>
+            Creates a <see cref="T:System.Threading.Tasks.TaskScheduler"/>
+            associated with the current <see cref="T:System.Threading.SynchronizationContext"/>.
+            </summary>
+            <remarks>
+            All <see cref="T:System.Threading.Tasks.Task">Task</see> instances queued to 
+            the returned scheduler will be executed through a call to the
+            <see cref="M:System.Threading.SynchronizationContext.Post(System.Threading.SendOrPostCallback,System.Object)">Post</see> method
+            on that context.
+            </remarks>
+            <returns>
+            A <see cref="T:System.Threading.Tasks.TaskScheduler"/> associated with 
+            the current <see cref="T:System.Threading.SynchronizationContext">SynchronizationContext</see>, as
+            determined by <see cref="P:System.Threading.SynchronizationContext.Current">SynchronizationContext.Current</see>.
+            </returns>
+            <exception cref="T:System.InvalidOperationException">
+            The current SynchronizationContext may not be used as a TaskScheduler.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.TryExecuteTask(System.Threading.Tasks.Task)">
+            <summary>
+            Attempts to execute the provided <see cref="T:System.Threading.Tasks.Task">Task</see>
+            on this scheduler.
+            </summary>
+            <remarks>
+            <para>
+            Scheduler implementations are provided with <see cref="T:System.Threading.Tasks.Task">Task</see>
+            instances to be executed through either the <see cref="M:System.Threading.Tasks.TaskScheduler.QueueTask(System.Threading.Tasks.Task)"/> method or the
+            <see cref="M:System.Threading.Tasks.TaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task,System.Boolean)"/> method. When the scheduler deems it appropriate to run the
+            provided task, <see cref="M:System.Threading.Tasks.TaskScheduler.TryExecuteTask(System.Threading.Tasks.Task)"/> should be used to do so. TryExecuteTask handles all
+            aspects of executing a task, including action invocation, exception handling, state management,
+            and lifecycle control.
+            </para>
+            <para>
+            <see cref="M:System.Threading.Tasks.TaskScheduler.TryExecuteTask(System.Threading.Tasks.Task)"/> must only be used for tasks provided to this scheduler by the .NET
+            Framework infrastructure. It should not be used to execute arbitrary tasks obtained through
+            custom mechanisms.
+            </para>
+            </remarks>
+            <param name="task">
+            A <see cref="T:System.Threading.Tasks.Task">Task</see> object to be executed.</param>
+            <exception cref="T:System.InvalidOperationException">
+            The <paramref name="task"/> is not associated with this scheduler.
+            </exception>
+            <returns>A Boolean that is true if <paramref name="task"/> was successfully executed, false if it
+            was not. A common reason for execution failure is that the task had previously been executed or
+            is in the process of being executed by another thread.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.GetScheduledTasksForDebugger">
+            <summary>
+            Provides an array of all queued <see cref="T:System.Threading.Tasks.Task">Task</see> instances
+            for the debugger.
+            </summary>
+            <remarks>
+            The returned array is populated through a call to <see cref="M:System.Threading.Tasks.TaskScheduler.GetScheduledTasks"/>.
+            Note that this function is only meant to be invoked by a debugger remotely. 
+            It should not be called by any other codepaths.
+            </remarks>
+            <returns>An array of <see cref="T:System.Threading.Tasks.Task">Task</see> instances.</returns> 
+            <exception cref="T:System.NotSupportedException">
+            This scheduler is unable to generate a list of queued tasks at this time.
+            </exception>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.GetTaskSchedulersForDebugger">
+            <summary>
+            Provides an array of all active <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> 
+            instances for the debugger.
+            </summary>
+            <remarks>
+            This function is only meant to be invoked by a debugger remotely. 
+            It should not be called by any other codepaths.
+            </remarks>
+            <returns>An array of <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> instances.</returns> 
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.RegisterTaskScheduler(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Registers a new TaskScheduler instance in the global collection of schedulers.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskScheduler.UnregisterTaskScheduler(System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Removes a TaskScheduler instance from the global collection of schedulers.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskScheduler.MaximumConcurrencyLevel">
+            <summary>
+            Indicates the maximum concurrency level this 
+            <see cref="T:System.Threading.Tasks.TaskScheduler"/>  is able to support.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskScheduler.RequiresAtomicStartTransition">
+            <summary>
+            Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry
+            using a CAS to transition from queued state to executing.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskScheduler.Default">
+            <summary>
+            Gets the default <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see> instance.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskScheduler.Current">
+            <summary>
+            Gets the <see cref="T:System.Threading.Tasks.TaskScheduler">TaskScheduler</see>
+            associated with the currently executing task.
+            </summary>
+            <remarks>
+            When not called from within a task, <see cref="P:System.Threading.Tasks.TaskScheduler.Current"/> will return the <see cref="P:System.Threading.Tasks.TaskScheduler.Default"/> scheduler.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Tasks.TaskScheduler.Id">
+            <summary>
+            Gets the unique ID for this <see cref="T:System.Threading.Tasks.TaskScheduler"/>.
+            </summary>
+        </member>
+        <member name="E:System.Threading.Tasks.TaskScheduler.UnobservedTaskException">
+            <summary>
+            Occurs when a faulted <see cref="T:System.Threading.Tasks.Task"/>'s unobserved exception is about to trigger exception escalation
+            policy, which, by default, would terminate the process.
+            </summary>
+            <remarks>
+            This AppDomain-wide event provides a mechanism to prevent exception
+            escalation policy (which, by default, terminates the process) from triggering. 
+            Each handler is passed a <see cref="T:System.Threading.Tasks.UnobservedTaskExceptionEventArgs"/>
+            instance, which may be used to examine the exception and to mark it as observed.
+            </remarks>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskScheduler.SystemThreadingTasks_TaskSchedulerDebugView">
+            <summary>
+            Nested class that provides debugger view for TaskScheduler
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.SynchronizationContextTaskScheduler">
+            <summary>
+            A TaskScheduler implementation that executes all tasks queued to it through a call to 
+            <see cref="M:System.Threading.SynchronizationContext.Post(System.Threading.SendOrPostCallback,System.Object)"/> on the <see cref="T:System.Threading.SynchronizationContext"/> 
+            that its associated with. The default constructor for this class binds to the current <see cref="T:System.Threading.SynchronizationContext"/> 
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.SynchronizationContextTaskScheduler.#ctor">
+            <summary>
+            Constructs a SynchronizationContextTaskScheduler associated with <see cref="T:System.Threading.SynchronizationContext.Current"/> 
+            </summary>
+            <exception cref="T:System.InvalidOperationException">This constructor expects <see cref="T:System.Threading.SynchronizationContext.Current"/> to be set.</exception>
+        </member>
+        <member name="M:System.Threading.Tasks.SynchronizationContextTaskScheduler.QueueTask(System.Threading.Tasks.Task)">
+            <summary>
+            Implemetation of <see cref="T:System.Threading.Tasks.TaskScheduler.QueueTask"/> for this scheduler class.
+            
+            Simply posts the tasks to be executed on the associated <see cref="T:System.Threading.SynchronizationContext"/>.
+            </summary>
+            <param name="task"></param>
+        </member>
+        <member name="M:System.Threading.Tasks.SynchronizationContextTaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            Implementation of <see cref="T:System.Threading.Tasks.TaskScheduler.TryExecuteTaskInline"/>  for this scheduler class.
+            
+            The task will be executed inline only if the call happens within 
+            the associated <see cref="T:System.Threading.SynchronizationContext"/>.
+            </summary>
+            <param name="task"></param>
+            <param name="taskWasPreviouslyQueued"></param>
+        </member>
+        <member name="P:System.Threading.Tasks.SynchronizationContextTaskScheduler.MaximumConcurrencyLevel">
+            <summary>
+            Implementes the <see cref="T:System.Threading.Tasks.TaskScheduler.MaximumConcurrencyLevel"/> property for
+            this scheduler class.
+            
+            By default it returns 1, because a <see cref="T:System.Threading.SynchronizationContext"/> based
+            scheduler only supports execution on a single thread.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.UnobservedTaskExceptionEventArgs">
+            <summary>
+            Provides data for the event that is raised when a faulted <see cref="T:System.Threading.Tasks.Task"/>'s
+            exception goes unobserved.
+            </summary>
+            <remarks>
+            The Exception property is used to examine the exception without marking it
+            as observed, whereas the <see cref="M:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.SetObserved"/> method is used to mark the exception
+            as observed.  Marking the exception as observed prevents it from triggering exception escalation policy
+            which, by default, terminates the process.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.#ctor(System.AggregateException)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.UnobservedTaskExceptionEventArgs"/> class
+            with the unobserved exception.
+            </summary>
+            <param name="exception">The Exception that has gone unobserved.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.SetObserved">
+            <summary>
+            Marks the <see cref="P:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.Exception"/> as "observed," thus preventing it
+            from triggering exception escalation policy which, by default, terminates the process.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.Observed">
+            <summary>
+            Gets whether this exception has been marked as "observed."
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.UnobservedTaskExceptionEventArgs.Exception">
+            <summary>
+            The Exception that went unobserved.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.ThreadPoolTaskScheduler">
+            <summary>
+            An implementation of TaskScheduler that uses the ThreadPool scheduler
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ThreadPoolTaskScheduler.#ctor">
+            <summary>
+            Constructs a new ThreadPool task scheduler object
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ThreadPoolTaskScheduler.QueueTask(System.Threading.Tasks.Task)">
+            <summary>
+            Schedules a task to the ThreadPool.
+            </summary>
+            <param name="task">The task to schedule.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.ThreadPoolTaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task,System.Boolean)">
+            <summary>
+            This internal function will do this:
+              (1) If the task had previously been queued, attempt to pop it and return false if that fails.
+              (2) Propagate the return value from Task.ExecuteEntry() back to the caller.
+            
+            IMPORTANT NOTE: TryExecuteTaskInline will NOT throw task exceptions itself. Any wait code path using this function needs
+            to account for exceptions that need to be propagated, and throw themselves accordingly.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.ThreadPoolTaskScheduler.NotifyWorkItemProgress">
+            <summary>
+            Notifies the scheduler that work is progressing (no-op).
+            </summary>
+        </member>
+        <member name="P:System.Threading.Tasks.ThreadPoolTaskScheduler.RequiresAtomicStartTransition">
+            <summary>
+            This is the only scheduler that returns false for this property, indicating that the task entry codepath is unsafe (CAS free)
+            since we know that the underlying scheduler already takes care of atomic transitions from queued to non-queued.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskSchedulerException">
+            <summary>
+            Represents an exception used to communicate an invalid operation by a
+            <see cref="T:System.Threading.Tasks.TaskScheduler"/>.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskSchedulerException.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskSchedulerException"/> class.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskSchedulerException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskSchedulerException"/>
+            class with a specified error message.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskSchedulerException.#ctor(System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskSchedulerException"/>
+            class using the default error message and a reference to the inner exception that is the cause of
+            this exception.
+            </summary>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskSchedulerException.#ctor(System.String,System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskSchedulerException"/>
+            class with a specified error message and a reference to the inner exception that is the cause of
+            this exception.
+            </summary>
+            <param name="message">The error message that explains the reason for the exception.</param>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskSchedulerException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Tasks.TaskSchedulerException"/>
+            class with serialized data.
+            </summary>
+            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds
+            the serialized object data about the exception being thrown.</param>
+            <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that
+            contains contextual information about the source or destination. </param>
+        </member>
+        <member name="T:System.Threading.BarrierPostPhaseException">
+            <summary>
+            The exception that is thrown when the post-phase action of a <see cref="T:System.Threading.Barrier"/> fails.
+            </summary>
+        </member>
+        <member name="M:System.Threading.BarrierPostPhaseException.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.BarrierPostPhaseException"/> class.
+            </summary>
+        </member>
+        <member name="M:System.Threading.BarrierPostPhaseException.#ctor(System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.BarrierPostPhaseException"/> class with the specified inner exception.
+            </summary>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+        </member>
+        <member name="M:System.Threading.BarrierPostPhaseException.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.BarrierPostPhaseException"/> class with a specified error message.
+            </summary>
+            <param name="message">A string that describes the exception.</param>
+        </member>
+        <member name="M:System.Threading.BarrierPostPhaseException.#ctor(System.String,System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.BarrierPostPhaseException"/> class with a specified error message and inner exception.
+            </summary>
+            <param name="message">A string that describes the exception.</param>
+            <param name="innerException">The exception that is the cause of the current exception.</param>
+        </member>
+        <member name="M:System.Threading.BarrierPostPhaseException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.BarrierPostPhaseException"/> class with serialized data.
+            </summary>
+            <param name="info">The object that holds the serialized object data.</param>
+            <param name="context">An object that describes the source or destination of the serialized data.</param>
+        </member>
+        <member name="T:System.Threading.Barrier">
+            <summary>
+            Enables multiple tasks to cooperatively work on an algorithm in parallel through multiple phases.
+            </summary>
+            <remarks>
+            <para>
+            A group of tasks cooperate by moving through a series of phases, where each in the group signals it
+            has arrived at the <see cref="T:System.Threading.Barrier"/> in a given phase and implicitly waits for all others to
+            arrive. The same <see cref="T:System.Threading.Barrier"/> can be used for multiple phases.
+            </para>
+            <para>
+            All public and protected members of <see cref="T:System.Threading.Barrier"/> are thread-safe and may be used
+            concurrently from multiple threads, with the exception of Dispose, which
+            must only be used when all other operations on the <see cref="T:System.Threading.Barrier"/> have
+            completed.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Barrier.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Barrier"/> class.
+            </summary>
+            <param name="participantCount">The number of participating threads.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"> <paramref name="participantCount"/> is less than 0
+            or greater than <see cref="T:System.Int32.MaxValue"/>.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.#ctor(System.Int32,System.Action{System.Threading.Barrier})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Threading.Barrier"/> class.
+            </summary>
+            <param name="participantCount">The number of participating threads.</param>
+            <param name="postPhaseAction">The <see cref="T:System.Action`1"/> to be executed after each
+            phase.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"> <paramref name="participantCount"/> is less than 0
+            or greater than <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <remarks>
+            The <paramref name="postPhaseAction"/> delegate will be executed after
+            all participants have arrived at the barrier in one phase.  The participants
+            will not be released to the next phase until the postPhaseAction delegate
+            has completed execution.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Barrier.GetCurrentTotal(System.Int32,System.Int32@,System.Int32@,System.Boolean@)">
+            <summary>
+            Extract the three variables current, total and sense from a given big variable
+            </summary>
+            <param name="currentTotal">The integer variable that contains the other three variables</param>
+            <param name="current">The current cparticipant count</param>
+            <param name="total">The total participants count</param>
+            <param name="sense">The sense flag</param>
+        </member>
+        <member name="M:System.Threading.Barrier.SetCurrentTotal(System.Int32,System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Write the three variables current. total and the sense to the m_currentTotal
+            </summary>
+            <param name="currentTotal">The old current total to compare</param>
+            <param name="current">The current cparticipant count</param>
+            <param name="total">The total participants count</param>
+            <param name="sense">The sense flag</param>
+            <returns>True if the CAS succeeded, false otherwise</returns>
+        </member>
+        <member name="M:System.Threading.Barrier.AddParticipant">
+            <summary>
+            Notifies the <see cref="T:System.Threading.Barrier"/> that there will be an additional participant.
+            </summary>
+            <returns>The phase number of the barrier in which the new participants will first
+            participate.</returns>
+            <exception cref="T:System.InvalidOperationException">
+            Adding a participant would cause the barrier's participant count to 
+            exceed <see cref="T:System.Int16.MaxValue"/>.
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.AddParticipants(System.Int32)">
+            <summary>
+            Notifies the <see cref="T:System.Threading.Barrier"/> that there will be additional participants.
+            </summary>
+            <param name="participantCount">The number of additional participants to add to the
+            barrier.</param>
+            <returns>The phase number of the barrier in which the new participants will first
+            participate.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="participantCount"/> is less than
+            0.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">Adding <paramref name="participantCount"/> participants would cause the
+            barrier's participant count to exceed <see cref="T:System.Int16.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.RemoveParticipant">
+            <summary>
+            Notifies the <see cref="T:System.Threading.Barrier"/> that there will be one less participant.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">The barrier already has 0
+            participants.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.RemoveParticipants(System.Int32)">
+            <summary>
+            Notifies the <see cref="T:System.Threading.Barrier"/> that there will be fewer participants.
+            </summary>
+            <param name="participantCount">The number of additional participants to remove from the barrier.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="participantCount"/> is less than
+            0.</exception>
+            <exception cref="T:System.InvalidOperationException">The barrier already has 0 participants.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait">
+            <summary>
+            Signals that a participant has reached the <see cref="T:System.Threading.Barrier"/> and waits for all other
+            participants to reach the barrier as well.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait(System.Threading.CancellationToken)">
+            <summary>
+            Signals that a participant has reached the <see cref="T:System.Threading.Barrier"/> and waits for all other
+            participants to reach the barrier, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has been
+            canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait(System.TimeSpan)">
+            <summary>
+            Signals that a participant has reached the <see cref="T:System.Threading.Barrier"/> and waits for all other
+            participants to reach the barrier as well, using a
+            <see cref="T:System.TimeSpan"/> to measure the time interval.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of
+            milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to
+            wait indefinitely.</param>
+            <returns>true if all other participants reached the barrier; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/>is a negative number
+            other than -1 milliseconds, which represents an infinite time-out, or it is greater than
+            <see cref="T:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait(System.TimeSpan,System.Threading.CancellationToken)">
+            <summary>
+            Signals that a participant has reached the <see cref="T:System.Threading.Barrier"/> and waits for all other
+            participants to reach the barrier as well, using a
+            <see cref="T:System.TimeSpan"/> to measure the time interval, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of
+            milliseconds to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to
+            wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if all other participants reached the barrier; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/>is a negative number
+            other than -1 milliseconds, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has been
+            canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait(System.Int32)">
+            <summary>
+            Signals that a participant has reached the <see cref="T:System.Threading.Barrier"/> and waits for all other
+            participants to reach the barrier as well, using a
+            32-bit signed integer to measure the time interval.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <returns>true if all other participants reached the barrier; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.SignalAndWait(System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Signals that a participant has reached the barrier and waits for all other participants to reach
+            the barrier as well, using a
+            32-bit signed integer to measure the time interval, while observing a <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/>(-1) to wait indefinitely.</param>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to
+            observe.</param>
+            <returns>true if all other participants reached the barrier; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action, the barrier currently has 0 participants,
+            or the barrier is being used by more threads than are registered as participants.
+            </exception>
+            <exception cref="T:System.OperationCanceledException"><paramref name="cancellationToken"/> has been
+            canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The current instance has already been
+            disposed.</exception>
+        </member>
+        <member name="M:System.Threading.Barrier.FinishPhase(System.Boolean)">
+            <summary>
+            Finish the phase by invoking the post phase action, and setting the event, this must be called by the 
+            last arrival thread
+            </summary>
+            <param name="observedSense">The current phase sense</param>
+        </member>
+        <member name="M:System.Threading.Barrier.SetResetEvents(System.Boolean)">
+            <summary>
+            Sets the current phase event and reset the next phase event
+            </summary>
+            <param name="observedSense">The current phase sense</param>
+        </member>
+        <member name="M:System.Threading.Barrier.Dispose">
+            <summary>
+            Releases all resources used by the current instance of <see cref="T:System.Threading.Barrier"/>.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">
+            The method was invoked from within a post-phase action.
+            </exception>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.Barrier"/>, Dispose is not thread-safe and may not be
+            used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Barrier.Dispose(System.Boolean)">
+            <summary>
+            When overridden in a derived class, releases the unmanaged resources used by the
+            <see cref="T:System.Threading.Barrier"/>, and optionally releases the managed resources.
+            </summary>
+            <param name="disposing">true to release both managed and unmanaged resources; false to release
+            only unmanaged resources.</param>
+            <remarks>
+            Unlike most of the members of <see cref="T:System.Threading.Barrier"/>, Dispose is not thread-safe and may not be
+            used concurrently with other members of this instance.
+            </remarks>
+        </member>
+        <member name="M:System.Threading.Barrier.ThrowIfDisposed">
+            <summary>
+            Throw ObjectDisposedException if the barrier is disposed
+            </summary>
+        </member>
+        <member name="P:System.Threading.Barrier.ParticipantsRemaining">
+            <summary>
+            Gets the number of participants in the barrier that haven’t yet signaled
+            in the current phase.
+            </summary>
+            <remarks>
+            This could be 0 during a post-phase action delegate execution or if the
+            ParticipantCount is 0.
+            </remarks>
+        </member>
+        <member name="P:System.Threading.Barrier.ParticipantCount">
+            <summary>
+            Gets the total number of participants in the barrier.
+            </summary>
+        </member>
+        <member name="P:System.Threading.Barrier.CurrentPhaseNumber">
+            <summary>
+            Gets the number of the barrier's current phase.
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.BlockingCollection`1">
+            <summary> 
+            Provides blocking and bounding capabilities for thread-safe collections that 
+            implement <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. 
+            </summary>
+            <remarks>
+            <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/> represents a collection
+            that allows for thread-safe adding and removing of data. 
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> is used as a wrapper
+            for an <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/> instance, allowing
+            removal attempts from the collection to block until data is available to be removed.  Similarly,
+            a <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> can be created to enforce
+            an upper-bound on the number of data elements allowed in the 
+            <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>; addition attempts to the
+            collection may then block until space is available to store the added items.  In this manner,
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> is similar to a traditional
+            blocking queue data structure, except that the underlying data storage mechanism is abstracted
+            away as an <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/>. 
+            </remarks>
+            <typeparam name="T">Specifies the type of elements in the collection.</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.#ctor">
+            <summary>Initializes a new instance of the 
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>
+            class without an upper-bound.
+            </summary>
+            <remarks>
+            The default underlying collection is a <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1">ConcurrentQueue&lt;T&gt;</see>.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.#ctor(System.Int32)">
+            <summary>Initializes a new instance of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>
+            class with the specified upper-bound.
+            </summary>
+            <param name="boundedCapacity">The bounded size of the collection.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="boundedCapacity"/> is
+            not a positive value.</exception>
+            <remarks>
+            The default underlying collection is a <see cref="T:System.Collections.Concurrent.ConcurrentQueue`1">ConcurrentQueue&lt;T&gt;</see>.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.#ctor(System.Collections.Concurrent.IProducerConsumerCollection{`0},System.Int32)">
+            <summary>Initializes a new instance of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>
+            class with the specified upper-bound and using the provided 
+            <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/> as its underlying data store.</summary>
+            <param name="collection">The collection to use as the underlying data store.</param>
+            <param name="boundedCapacity">The bounded size of the collection.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="boundedCapacity"/> is not a positive value.</exception>
+            <exception cref="T:System.ArgumentException">The supplied <paramref name="collection"/> contains more values 
+            than is permitted by <paramref name="boundedCapacity"/>.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.#ctor(System.Collections.Concurrent.IProducerConsumerCollection{`0})">
+            <summary>Initializes a new instance of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>
+            class without an upper-bound and using the provided 
+            <see cref="T:System.Collections.Concurrent.IProducerConsumerCollection{T}"/> as its underlying data store.</summary>
+            <param name="collection">The collection to use as the underlying data store.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collection"/> argument is
+            null.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Initialize(System.Collections.Concurrent.IProducerConsumerCollection{`0},System.Int32,System.Int32)">
+            <summary>Initializes the BlockingCollection instance.</summary>
+            <param name="collection">The collection to use as the underlying data store.</param>
+            <param name="boundedCapacity">The bounded size of the collection.</param>
+            <param name="collectionCount">The number of items currently in the underlying collection.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Add(`0)">
+            <summary>
+            Adds the item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item to be added to the collection. The value can be a null reference.</param>
+            <exception cref="T:System.InvalidOperationException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+            <remarks>
+            If a bounded capacity was specified when this instance of 
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> was initialized, 
+            a call to Add may block until space is available to store the provided item.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Add(`0,System.Threading.CancellationToken)">
+            <summary>
+            Adds the item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="item">The item to be added to the collection. The value can be a null reference.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.InvalidOperationException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+            <remarks>
+            If a bounded capacity was specified when this instance of 
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> was initialized, 
+            a call to <see cref="M:System.Collections.Concurrent.BlockingCollection`1.Add(`0,System.Threading.CancellationToken)"/> may block until space is available to store the provided item.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAdd(`0)">
+            <summary>
+            Attempts to add the specified item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item to be added to the collection.</param>
+            <returns>true if the <paramref name="item"/> could be added; otherwise, false.</returns>
+            <exception cref="T:System.InvalidOperationException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAdd(`0,System.TimeSpan)">
+            <summary>
+            Attempts to add the specified item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item to be added to the collection.</param>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>true if the <paramref name="item"/> could be added to the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.InvalidOperationException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative number
+            other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAdd(`0,System.Int32)">
+            <summary>
+            Attempts to add the specified item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item to be added to the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <returns>true if the <paramref name="item"/> could be added to the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.InvalidOperationException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAdd(`0,System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Attempts to add the specified item to the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="item">The item to be added to the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>true if the <paramref name="item"/> could be added to the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.InvalidOperationException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddWithNoTimeValidation(`0,System.Int32,System.Threading.CancellationToken)">
+            <summary>Adds an item into the underlying data store using its IProducerConsumerCollection&lt;T&gt;.Add 
+            method. If a bounded capacity was specified and the collection was full, 
+            this method will wait for, at most, the timeout period trying to add the item. 
+            If the timeout period was exhaused before successfully adding the item this method will 
+            return false.</summary>
+            <param name="item">The item to be added to the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait for the collection to accept the item,
+            or Timeout.Infinite to wait indefinitely.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>False if the collection remained full till the timeout period was exhausted.True otherwise.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.InvalidOperationException">the collection has already been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">If the collection has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection didn't accept the item.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Take">
+            <summary>Takes an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.</summary>
+            <returns>The item removed from the collection.</returns>
+            <exception cref="T:System.OperationCanceledException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> is empty and has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <remarks>A call to <see cref="M:System.Collections.Concurrent.BlockingCollection`1.Take"/> may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Take(System.Threading.CancellationToken)">
+            <summary>Takes an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.</summary>
+            <returns>The item removed from the collection.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled or the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> is empty and has been marked
+            as complete with regards to additions.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <remarks>A call to <see cref="M:System.Collections.Concurrent.BlockingCollection`1.Take(System.Threading.CancellationToken)"/> may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTake(`0@)">
+            <summary>
+            Attempts to remove an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item removed from the collection.</param>
+            <returns>true if an item could be removed; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTake(`0@,System.TimeSpan)">
+            <summary>
+            Attempts to remove an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item removed from the collection.</param>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>true if an item could be removed from the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative number
+            other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTake(`0@,System.Int32)">
+            <summary>
+            Attempts to remove an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            </summary>
+            <param name="item">The item removed from the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <returns>true if an item could be removed from the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTake(`0@,System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Attempts to remove an item from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="item">The item removed from the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>true if an item could be removed from the collection within 
+            the alloted time; otherwise, false.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">The underlying collection was modified
+            outside of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTakeWithNoTimeValidation(`0@,System.Int32,System.Threading.CancellationToken,System.Threading.CancellationTokenSource)">
+            <summary>Takes an item from the underlying data store using its IProducerConsumerCollection&lt;T&gt;.Take 
+            method. If the collection was empty, this method will wait for, at most, the timeout period (if AddingIsCompleted is false)
+            trying to remove an item. If the timeout period was exhaused before successfully removing an item 
+            this method will return false.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="item">The item removed from the collection.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait for the collection to have an item available 
+            for removal, or Timeout.Infinite to wait indefinitely.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <param name="combinedTokenSource">A combined cancellation token if created, it is only created by GetConsumingEnumerable to avoid creating the linked token 
+            multiple times.</param>
+            <returns>False if the collection remained empty till the timeout period was exhausted. True otherwise.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ObjectDisposedException">If the collection has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.AddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0)">
+            <summary>
+            Adds the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array to which the item was added.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>
+            If a bounded capacity was specified when all of the
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances were initialized, 
+            a call to AddToAny may block until space is available in one of the collections
+            to store the provided item.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.AddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0,System.Threading.CancellationToken)">
+            <summary>
+            Adds the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled. 
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array to which the item was added.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>
+            If a bounded capacity was specified when all of the
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances were initialized, 
+            a call to AddToAny may block until space is available in one of the collections
+            to store the provided item.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0)">
+            <summary>
+            Attempts to add the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> 
+            array to which the item was added, or -1 if the item could not be added.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0,System.TimeSpan)">
+            <summary>
+            Attempts to add the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>The index of the collection in the <paramref name="collections"/> 
+            array to which the item was added, or -1 if the item could not be added.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative number
+            other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0,System.Int32)">
+            <summary>
+            Attempts to add the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>        /// <returns>The index of the collection in the <paramref name="collections"/> 
+            array to which the item was added, or -1 if the item could not be added.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddToAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0,System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Attempts to add the specified item to any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item to be added to one of the collections.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>        /// <returns>The index of the collection in the <paramref name="collections"/> 
+            array to which the item was added, or -1 if the item could not be added.</returns>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element, or at least one of collections has been
+            marked as complete for adding.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one underlying collection didn't accept the item.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryAddTakeAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@,System.Int32,System.Collections.Concurrent.BlockingCollection{`0}.OperationMode,System.Threading.CancellationToken)">
+            <summary>Adds/Takes an item to/from anyone of the specified collections.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled. 
+            </summary>
+            <param name="collections">The collections into which the item can be added.</param>
+            <param name="item">The item to be added or the item removed and returned to the caller.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait for a collection to accept the 
+            operation, or -1 to wait indefinitely.</param>
+            <param name="operationMode">Indicates whether this method is called to Add or Take.</param>
+            <param name="externalCancellationToken">A cancellation token to observe.</param>
+            <returns>The index into collections for the collection which accepted the 
+            adding/removal of the item; -1 if the item could not be added/removed.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ArgumentNullException">If the collections argument is null.</exception>
+            <exception cref="T:System.ArgumentException">If the collections argument is a 0-length array or contains a 
+            null element. Also, if atleast one of the collections has been marked complete for adds.</exception>
+            <exception cref="T:System.ObjectDisposedException">If atleast one of the collections has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.GetHandles(System.Collections.Concurrent.BlockingCollection{`0}[],System.Collections.Concurrent.BlockingCollection{`0}.OperationMode,System.Threading.CancellationToken,System.Boolean,System.Threading.CancellationToken[]@)">
+            <summary>
+            Local static method, used by TryAddTakeAny to get the wait handles for the collection, with exclude option to exclude the Compeleted collections
+            </summary>
+            <param name="collections">The blocking collections</param>
+            <param name="operationMode">Add or Take operation</param>
+            <param name="externalCancellationToken">The original CancellationToken</param>
+            <param name="excludeCompleted">True to exclude the compeleted collections</param>
+            <param name="cancellationTokens">Complete list of cancellationTokens to observe</param>
+            <returns>The collections wait handles</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.WaitHandle_WaitAny(System.Collections.Generic.List{System.Threading.WaitHandle},System.Int32,System.Threading.CancellationToken,System.Threading.CancellationToken)">
+            <summary>
+            Helper to perform WaitHandle.WaitAny(.., CancellationToken)
+            this should eventually appear on the WaitHandle class.
+            </summary>
+            <param name="handles"></param>
+            <param name="millisecondsTimeout"></param>
+            <param name="combinedToken"></param>
+            <param name="externalToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.UpdateTimeOut(System.Int64,System.Int32)">
+            <summary>
+            Helper function to measure and update the wait time
+            </summary>
+            <param name="startTimeTicks"> The first time (in Ticks) observed when the wait started</param>
+            <param name="originalWaitMillisecondsTimeout">The orginal wait timeoutout in milliseconds</param>
+            <returns>The new wait time in milliseconds, -1 if the time expired</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@)">
+            <summary>
+            Takes an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@,System.Threading.CancellationToken)">
+            <summary>
+            Takes an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of 
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@)">
+            <summary>
+            Attempts to remove an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TryTakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@,System.TimeSpan)">
+            <summary>
+            Attempts to remove an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <param name="timeout">A <see cref="T:System.TimeSpan"/> that represents the number of milliseconds
+            to wait, or a <see cref="T:System.TimeSpan"/> that represents -1 milliseconds to wait indefinitely.
+            </param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout"/> is a negative number
+            other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
+            <see cref="F:System.Int32.MaxValue"/>.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TryTakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@,System.Int32)">
+            <summary>
+            Attempts to remove an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TryTakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.TryTakeFromAny(System.Collections.Concurrent.BlockingCollection{`0}[],`0@,System.Int32,System.Threading.CancellationToken)">
+            <summary>
+            Attempts to remove an item from any one of the specified
+            <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances.
+            A <see cref="T:System.OperationCanceledException"/> is thrown if the <see cref="T:System.Threading.CancellationToken"/> is
+            canceled. 
+            </summary>
+            <param name="collections">The array of collections.</param>
+            <param name="item">The item removed from one of the collections.</param>
+            <param name="millisecondsTimeout">The number of milliseconds to wait, or <see cref="F:System.Threading.Timeout.Infinite"/> (-1) to wait indefinitely.</param>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>The index of the collection in the <paramref name="collections"/> array from which 
+            the item was removed, or -1 if an item could not be removed.</returns>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="collections"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="collections"/> argument is
+            a 0-length array or contains a null element.</exception>
+            <exception cref="T:System.ObjectDisposedException">At least one of the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances has been disposed.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="millisecondsTimeout"/> is a
+            negative number other than -1, which represents an infinite time-out.</exception>
+            <exception cref="T:System.InvalidOperationException">At least one of the underlying collections was modified
+            outside of its <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The count of <paramref name="collections"/> is greater than the maximum size of
+            62 for STA and 63 for MTA.</exception>
+            <remarks>A call to TryTakeFromAny may block until an item is available to be removed.</remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.CompleteAdding">
+            <summary>
+            Marks the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instances
+            as not accepting any more additions.  
+            </summary>
+            <remarks>
+            After a collection has been marked as complete for adding, adding to the collection is not permitted 
+            and attempts to remove from the collection will not wait when the collection is empty.
+            </remarks>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.CancelWaitingConsumers">
+            <summary>Cancels the semaphores.</summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Dispose">
+            <summary>
+            Releases resources used by the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.Dispose(System.Boolean)">
+            <summary>
+            Releases resources used by the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.
+            </summary>
+            <param name="disposing">Whether being disposed explicitly (true) or due to a finalizer (false).</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.ToArray">
+            <summary>Copies the items from the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance into a new array.</summary>
+            <returns>An array containing copies of the elements of the collection.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <remarks>
+            The copied elements are not removed from the collection.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.CopyTo(`0[],System.Int32)">
+            <summary>Copies all of the items in the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance 
+            to a compatible one-dimensional array, starting at the specified index of the target array.
+            </summary>
+            <param name="array">The one-dimensional array that is the destination of the elements copied from 
+            the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance. The array must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="array"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="index"/> argument is less than zero.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="index"/> argument is equal to or greater 
+            than the length of the <paramref name="array"/>.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
+            <summary>Copies all of the items in the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance 
+            to a compatible one-dimensional array, starting at the specified index of the target array.
+            </summary>
+            <param name="array">The one-dimensional array that is the destination of the elements copied from 
+            the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance. The array must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
+            <exception cref="T:System.ArgumentNullException">The <paramref name="array"/> argument is
+            null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">The <paramref name="index"/> argument is less than zero.</exception>
+            <exception cref="T:System.ArgumentException">The <paramref name="index"/> argument is equal to or greater 
+            than the length of the <paramref name="array"/>, the array is multidimensional, or the type parameter for the collection 
+            cannot be cast automatically to the type of the destination array.</exception>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.GetConsumingEnumerable">
+            <summary>Provides a consuming <see cref="T:System.Collections.Generics.IEnumerable{T}"/> for items in the collection.</summary>
+            <returns>An <see cref="T:System.Collections.Generics.IEnumerable{T}"/> that removes and returns items from the collection.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.GetConsumingEnumerable(System.Threading.CancellationToken)">
+            <summary>Provides a consuming <see cref="T:System.Collections.Generics.IEnumerable{T}"/> for items in the collection.
+            Calling MoveNext on the returned enumerable will block if there is no data available, or will
+            throw an <see cref="T:System.OperationCanceledException"/> if the <see cref="T:System.Threading.CancellationToken"/> is canceled.
+            </summary>
+            <param name="cancellationToken">A cancellation token to observe.</param>
+            <returns>An <see cref="T:System.Collections.Generics.IEnumerable{T}"/> that removes and returns items from the collection.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+            <exception cref="T:System.OperationCanceledException">If the <see cref="T:System.Threading.CancellationToken"/> is canceled.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.System#Collections#Generic#IEnumerable{T}#GetEnumerator">
+            <summary>Provides an <see cref="T:System.Collections.Generics.IEnumerator{T}"/> for items in the collection.</summary>
+            <returns>An <see cref="T:System.Collections.Generics.IEnumerator{T}"/> for the items in the collection.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.System#Collections#IEnumerable#GetEnumerator">
+            <summary>Provides an <see cref="T:System.Collections.IEnumerator"/> for items in the collection.</summary>
+            <returns>An <see cref="T:System.Collections.IEnumerator"/> for the items in the collection.</returns>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.ValidateCollectionsArray(System.Collections.Concurrent.BlockingCollection{`0}[],System.Collections.Concurrent.BlockingCollection{`0}.OperationMode)">
+            <summary>Centralizes the logic for validating the BlockingCollections array passed to TryAddToAny()
+            and TryTakeFromAny().</summary>
+            <param name="collections">The collections to/from which an item should be added/removed.</param>
+            <param name="operationMode">Indicates whether this method is called to Add or Take.</param>
+            <returns>A copy of the collections array that acts as a defense to prevent an “outsider” from changing 
+            elements of the array after we have done the validation on them.</returns>
+            <exception cref="T:System.ArgumentNullException">If the collections argument is null.</exception>
+            <exception cref="T:System.ArgumentException">If the collections argument is a 0-length array or contains a 
+            null element. Also, if atleast one of the collections has been marked complete for adds.</exception>
+            <exception cref="T:System.ObjectDisposedException">If atleast one of the collections has been disposed.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.ValidateTimeout(System.TimeSpan)">
+            <summary>Centeralizes the logic of validating the timeout input argument.</summary>
+            <param name="timeout">The TimeSpan to wait for to successfully complete an operation on the collection.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">If the number of millseconds represented by the timeout 
+            TimeSpan is less than 0 or is larger than Int32.MaxValue and not Timeout.Infinite</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.ValidateMillisecondsTimeout(System.Int32)">
+            <summary>Centralizes the logic of validating the millisecondsTimeout input argument.</summary>
+            <param name="millisecondsTimeout">The number of milliseconds to wait for to successfully complete an 
+            operation on the collection.</param>
+            <exception cref="T:System.ArgumentOutOfRangeException">If the number of millseconds is less than 0 and not 
+            equal to Timeout.Infinite.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.BlockingCollection`1.CheckDisposed">
+            <summary>Throws a System.ObjectDisposedException if the collection was disposed</summary>
+            <exception cref="T:System.ObjectDisposedException">If the collection has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.BoundedCapacity">
+            <summary>Gets the bounded capacity of this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.</summary>
+            <value>The bounded capacity of this collection, or int.MaxValue if no bound was supplied.</value>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.IsAddingCompleted">
+            <summary>Gets whether this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked as complete for adding.</summary>
+            <value>Whether this collection has been marked as complete for adding.</value>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.IsCompleted">
+            <summary>Gets whether this <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been marked as complete for adding and is empty.</summary>
+            <value>Whether this collection has been marked as complete for adding and is empty.</value>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.Count">
+            <summary>Gets the number of items contained in the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.</summary>
+            <value>The number of items contained in the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/>.</value>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.System#Collections#ICollection#IsSynchronized">
+            <summary>Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is synchronized.</summary>
+            <exception cref="T:System.ObjectDisposedException">The <see
+            cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> has been disposed.</exception>
+        </member>
+        <member name="P:System.Collections.Concurrent.BlockingCollection`1.System#Collections#ICollection#SyncRoot">
+            <summary>
+            Gets an object that can be used to synchronize access to the <see
+            cref="T:System.Collections.ICollection"/>. This property is not supported.
+            </summary>
+            <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported.</exception>
+        </member>
+        <member name="T:System.Collections.Concurrent.BlockingCollection`1.OperationMode">
+            <summary>An enumerated data type used internal to the class to specify to a generic method
+            the current mode of operation.</summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.SystemThreadingCollections_BlockingCollectionDebugView`1">
+            <summary>A debugger view of the blocking collection that makes it simple to browse the
+            collection's contents at a point in time.</summary>
+            <typeparam name="T">The type of element that the BlockingCollection will hold.</typeparam>
+        </member>
+        <member name="M:System.Collections.Concurrent.SystemThreadingCollections_BlockingCollectionDebugView`1.#ctor(System.Collections.Concurrent.BlockingCollection{`0})">
+            <summary>Constructs a new debugger view object for the provided blocking collection object.</summary>
+            <param name="collection">A blocking collection to browse in the debugger.</param>
+        </member>
+        <member name="P:System.Collections.Concurrent.SystemThreadingCollections_BlockingCollectionDebugView`1.Items">
+            <summary>Returns a snapshot of the underlying collection's elements.</summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentBag`1">
+            <summary>
+            Represents an thread-safe, unordered collection of objects. 
+            </summary>
+            <typeparam name="T">Specifies the type of elements in the bag.</typeparam>
+            <remarks>
+            <para>
+            Bags are useful for storing objects when ordering doesn't matter, and unlike sets, bags support
+            duplicates. <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> is a thread-safe bag implementation, optimized for
+            scenarios where the same thread will be both producing and consuming data stored in the bag.
+            </para>
+            <para>
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> accepts null reference (Nothing in Visual Basic) as a valid 
+            value for reference types.
+            </para>
+            <para>
+            All public and protected members of <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> are thread-safe and may be used
+            concurrently from multiple threads.
+            </para>
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>
+            class.
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>
+            class that contains elements copied from the specified collection.
+            </summary>
+            <param name="collection">The collection whose elements are copied to the new <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is a null reference
+            (Nothing in Visual Basic).</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.Initialize(System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Local helper function to initalize a new bag object
+            </summary>
+            <param name="collection">An enumeration containing items with which to initialize this bag.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.Add(`0)">
+            <summary>
+            Adds an object to the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <param name="item">The object to be added to the
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>. The value can be a null reference
+            (Nothing in Visual Basic) for reference types.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.AddInternal(System.Collections.Concurrent.ConcurrentBag{`0}.ThreadLocalList,`0)">
+            <summary>
+            </summary>
+            <param name="list"></param>
+            <param name="item"></param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.System#Collections#Concurrent#IProducerConsumerCollection{T}#TryAdd(`0)">
+            <summary>
+            Attempts to add an object to the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <param name="item">The object to be added to the 
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>. The value can be a null reference
+            (Nothing in Visual Basic) for reference types.</param>
+            <returns>Always returns true</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.TryTake(`0@)">
+            <summary>
+            Attempts to remove and return an object from the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <param name="result">When this method returns, <paramref name="result"/> contains the object
+            removed from the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> or the default value
+            of <typeparamref name="T"/> if the operation failed.</param>
+            <returns>true if an object was removed successfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.TryPeek(`0@)">
+            <summary>
+            Attempts to return an object from the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>
+            without removing it.
+            </summary>
+            <param name="result">When this method returns, <paramref name="result"/> contains an object from
+            the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> or the default value of
+            <typeparamref name="T"/> if the operation failed.</param>
+            <returns>true if and object was returned successfully; otherwise, false.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.TryTakeOrPeek(`0@,System.Boolean)">
+            <summary>
+            Local helper function to Take or Peek an item from the bag
+            </summary>
+            <param name="result">To receive the item retrieved from the bag</param>
+            <param name="take">True means Take operation, false means Peek operation</param>
+            <returns>True if succeeded, false otherwise</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.GetThreadList(System.Boolean)">
+            <summary>
+            Local helper function to retrieve a thread local list by a thread object
+            </summary>
+            <param name="forceCreate">Create a new list if the thread does ot exist</param>
+            <returns>The local list object</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.GetUnownedList">
+            <summary>
+            Try to reuse an unowned list if exist
+            unowned lists are the lists that their owner threads are aborted or terminated
+            this is workaround to avoid memory leaks.
+            </summary>
+            <returns>The list object, null if all lists are owned</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.Steal(`0@,System.Boolean)">
+            <summary>
+            Local helper method to steal an item from any other non empty thread
+            It enumerate all other threads in two passes first pass acquire the lock with TryEnter if succeeded
+            it steals the item, otherwise it enumerate them again in 2nd pass and acquire the lock using Enter
+            </summary>
+            <param name="result">To receive the item retrieved from the bag</param>
+            <param name="take">Whether to remove or peek.</param>
+            <returns>True if succeeded, false otherwise.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.TrySteal(System.Collections.Concurrent.ConcurrentBag{`0}.ThreadLocalList,`0@,System.Boolean)">
+            <summary>
+            local helper function tries to steal an item from given local list
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.CanSteal(System.Collections.Concurrent.ConcurrentBag{`0}.ThreadLocalList)">
+            <summary>
+            Local helper function to check the list if it became empty after acquiring the lock
+            and wait if there is unsynchronized Add/Take operation in the list to be done
+            </summary>
+            <param name="list">The list to steal</param>
+            <returns>True if can steal, false otherwise</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.CopyTo(`0[],System.Int32)">
+            <summary>
+            Copies the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> elements to an existing
+            one-dimensional <see cref="T:System.Array">Array</see>, starting at the specified array
+            index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
+            destination of the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>. The <see cref="T:System.Array">Array</see> must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException"><paramref name="index"/> is equal to or greater than the
+            length of the <paramref name="array"/>
+            -or- the number of elements in the source <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> is greater than the available space from
+            <paramref name="index"/> to the end of the destination <paramref name="array"/>.</exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
+            <summary>
+            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see cref="T:System.Array"/>, starting at a particular
+            <see cref="T:System.Array"/> index.
+            </summary>
+            <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the
+            destination of the elements copied from the
+            <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>. The <see cref="T:System.Array">Array</see> must have zero-based indexing.</param>
+            <param name="index">The zero-based index in <paramref name="array"/> at which copying
+            begins.</param>
+            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is a null reference (Nothing in
+            Visual Basic).</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than
+            zero.</exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="array"/> is multidimensional. -or-
+            <paramref name="array"/> does not have zero-based indexing. -or-
+            <paramref name="index"/> is equal to or greater than the length of the <paramref name="array"/>
+            -or- The number of elements in the source <see cref="T:System.Collections.ICollection"/> is
+            greater than the available space from <paramref name="index"/> to the end of the destination
+            <paramref name="array"/>. -or- The type of the source <see cref="T:System.Collections.ICollection"/> cannot be cast automatically to the type of the
+            destination <paramref name="array"/>.
+            </exception>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ToArray">
+            <summary>
+            Copies the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> elements to a new array.
+            </summary>
+            <returns>A new array containing a snapshot of elements copied from the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <returns>An enumerator for the contents of the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.</returns>
+            <remarks>
+            The enumeration represents a moment-in-time snapshot of the contents
+            of the bag.  It does not reflect any updates to the collection after 
+            <see cref="M:System.Collections.Concurrent.ConcurrentBag`1.GetEnumerator"/> was called.  The enumerator is safe to use
+            concurrently with reads from and writes to the bag.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <returns>An enumerator for the contents of the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.</returns>
+            <remarks>
+            The items enumerated represent a moment-in-time snapshot of the contents
+            of the bag.  It does not reflect any update to the collection after 
+            <see cref="M:System.Collections.Concurrent.ConcurrentBag`1.GetEnumerator"/> was called.
+            </remarks>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.OnSerializing(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Get the data array to be serialized
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.OnDeserialized(System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Construct the stack from a previously seiralized one
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.FreezeBag(System.Boolean@)">
+            <summary>
+            Local helper method to freeze all bag operations, it
+            1- Acquire the global lock to prevent any other thread to freeze the bag, and also new new thread can be added
+            to the dictionary
+            2- Then Acquire all local lists locks to prevent steal and synchronized operations
+            3- Wait for all un-synchronized operations to be done
+            </summary>
+            <param name="lockTaken">Retrieve the lock taken result for the global lock, to be passed to Unfreeze method</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.UnfreezeBag(System.Boolean)">
+            <summary>
+            Local helper method to unfreeze the bag from a frozen state
+            </summary>
+            <param name="lockTaken">The lock taken result from the Freeze method</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.AcquireAllLocks">
+            <summary>
+            local helper method to acquire all local lists locks
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ReleaseAllLocks">
+            <summary>
+            Local helper method to release all local lists locks
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.WaitAllOperations">
+            <summary>
+            Local helper function to wait all unsynchronized operations
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.GetCountInternal">
+            <summary>
+            Local helper function to get the bag count, the caller should call it from Freeze/Unfreeze block
+            </summary>
+            <returns>The current bag count</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ToList">
+            <summary>
+            Local helper function to return the bag item in a list, this is mainly used by CopyTo and ToArray
+            This is not thread safe, should be called in Freeze/UnFreeze bag block
+            </summary>
+            <returns>List the contains the bag items</returns>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentBag`1.Count">
+            <summary>
+            Gets the number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.
+            </summary>
+            <value>The number of elements contained in the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>.</value>
+            <remarks>
+            The count returned represents a moment-in-time snapshot of the contents
+            of the bag.  It does not reflect any updates to the collection after 
+            <see cref="M:System.Collections.Concurrent.ConcurrentBag`1.GetEnumerator"/> was called.
+            </remarks>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentBag`1.IsEmpty">
+            <summary>
+            Gets a value that indicates whether the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> is empty.
+            </summary>
+            <value>true if the <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/> is empty; otherwise, false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentBag`1.System#Collections#ICollection#IsSynchronized">
+            <summary>
+            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is
+            synchronized with the SyncRoot.
+            </summary>
+            <value>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized
+            with the SyncRoot; otherwise, false. For <see cref="T:System.Collections.Concurrent.ConcurrentBag`1"/>, this property always
+            returns false.</value>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentBag`1.System#Collections#ICollection#SyncRoot">
+            <summary>
+            Gets an object that can be used to synchronize access to the <see
+            cref="T:System.Collections.ICollection"/>. This property is not supported.
+            </summary>
+            <exception cref="T:System.NotSupportedException">The SyncRoot property is not supported.</exception>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentBag`1.Node">
+            <summary>
+            A class that represents a node in the lock thread list
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList">
+            <summary>
+            A class that represents the lock thread list
+            </summary>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.#ctor(System.Threading.Thread)">
+            <summary>
+            ThreadLocalList constructor
+            </summary>
+            <param name="ownerThread">The owner thread for this list</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.Add(`0,System.Boolean)">
+            <summary>
+            Add new item to head of the list
+            </summary>
+            <param name="item">The item to add.</param>
+            <param name="updateCount">Whether to update the count.</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.Remove(`0@)">
+            <summary>
+            Remove an item from the head of the list
+            </summary>
+            <param name="result">The removed item</param>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.Peek(`0@)">
+            <summary>
+            Peek an item from the head of the list
+            </summary>
+            <param name="result">the peeked item</param>
+            <returns>True if succeeded, false otherwise</returns>
+        </member>
+        <member name="M:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.Steal(`0@,System.Boolean)">
+            <summary>
+            Steal an item from the tail of the list
+            </summary>
+            <param name="result">the removed item</param>
+            <param name="remove">remove or peek flag</param>
+        </member>
+        <member name="P:System.Collections.Concurrent.ConcurrentBag`1.ThreadLocalList.Count">
+            <summary>
+            Gets the total list count, it's not thread safe, may provide incorrect count if it is called concurrently
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.ConcurrentBag`1.ListOperation">
+            <summary>
+            List operations
+            </summary>
+        </member>
+        <member name="T:System.Collections.Concurrent.SystemThreadingCollection_IProducerConsumerCollectionDebugView`1">
+            <summary>
+            A simple class for the debugger view window
+            </summary>
+        </member>
+        <member name="T:System.Linq.ParallelEnumerable">
+            <summary>
+            Provides a set of methods for querying objects that implement 
+            ParallelQuery{TSource}.  This is the parallel equivalent of 
+            <see cref="T:System.Linq.Enumerable"/>.
+            </summary>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsParallel``1(System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            Enables parallelization of a query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> 
+            to convert to a <see cref="T:System.Linq.ParallelQuery`1"/>.</param>
+            <returns>The source as a <see cref="T:System.Linq.ParallelQuery`1"/> to bind to
+            ParallelEnumerable extension methods.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsParallel``1(System.Collections.Concurrent.Partitioner{``0})">
+            <summary>
+            Enables parallelization of a query, as sourced by a partitioner
+            responsible for splitting the input sequence into partitions.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A partitioner over the input sequence.</param>
+            <returns>The <paramref name="source"/> as a ParallelQuery to bind to ParallelEnumerable extension methods.</returns>
+            <remarks>
+            The source partitioner's GetOrderedPartitions method is used when ordering is enabled,
+            whereas the partitioner's GetPartitions is used if ordering is not enabled (the default).
+            The source partitioner's GetDynamicPartitions and GetDynamicOrderedPartitions are not used.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsOrdered``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Enables treatment of a data source as if it was ordered, overriding the default of unordered.
+            AsOrdered may only be invoked on sequences returned by AsParallel, ParallelEnumerable.Range,
+            and ParallelEnumerable.Repeat.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The input sequence.</param>
+            <exception cref="T:System.InvalidOperationException">
+            Thrown if <paramref name="source"/> is not one of AsParallel, ParallelEnumerable.Range, or ParallelEnumerable.Repeat.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <remarks>
+            A natural tension exists between performance and preserving order in parallel processing. By default, 
+            a parallelized query behaves as if the ordering of the results is arbitrary 
+            unless AsOrdered is applied or there is an explicit OrderBy operator in the query.
+            </remarks>
+            <returns>The source sequence which will maintain ordering in the query.</returns>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsOrdered(System.Linq.ParallelQuery)">
+            <summary>
+            Enables treatment of a data source as if it was ordered, overriding the default of unordered.
+            AsOrdered may only be invoked on sequences returned by AsParallel, ParallelEnumerable.Range,
+            and ParallelEnumerable.Repeat.
+            </summary>
+            <param name="source">The input sequence.</param>
+            <exception cref="T:System.InvalidOperationException">
+            Thrown if the <paramref name="source"/> is not one of AsParallel, ParallelEnumerable.Range, or ParallelEnumerable.Repeat.
+            </exception>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <remarks>
+            A natural tension exists between performance and preserving order in parallel processing. By default, 
+            a parallelized query behaves as if the ordering of the results is arbitrary unless AsOrdered 
+            is applied or there is an explicit OrderBy operator in the query.
+            </remarks>
+            <returns>The source sequence which will maintain ordering in the query.</returns>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsUnordered``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Allows an intermediate query to be treated as if no ordering is implied among the elements.
+            </summary>
+            <remarks>
+            AsUnordered may provide
+            performance benefits when ordering is not required in a portion of a query.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The input sequence.</param>
+            <returns>The source sequence with arbitrary order.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsParallel(System.Collections.IEnumerable)">
+            <summary>
+            Enables parallelization of a query.
+            </summary>
+            <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> to convert 
+            to a <see cref="T:System.Linq.ParallelQuery`1"/>.</param>
+            <returns>
+            The source as a ParallelQuery to bind to
+            ParallelEnumerable extension methods.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsSequential``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Converts a <see cref="T:System.Linq.ParallelQuery`1"/> into an 
+            <see cref="T:System.Collections.Generic.IEnumerable`1"/> to force sequential
+            evaluation of the query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A <see cref="T:System.Linq.ParallelQuery`1"/> to convert to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>.</param>
+            <returns>The source as an <see cref="T:System.Collections.Generic.IEnumerable`1"/>
+            to bind to sequential extension methods.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.WithTaskScheduler``1(System.Linq.ParallelQuery{``0},System.Threading.Tasks.TaskScheduler)">
+            <summary>
+            Sets the task scheduler to execute the query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A ParallelQuery on which to set the task scheduler option.</param>
+            <param name="taskScheduler">Task scheduler to execute the query.</param>
+            <returns>ParallelQuery representing the same query as source, but with the task scheduler option set.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="taskScheduler"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            WithTaskScheduler is used multiple times in the query.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.WithDegreeOfParallelism``1(System.Linq.ParallelQuery{``0},System.Int32)">
+            <summary>
+            Sets the degree of parallelism to use in a query. Degree of parallelism is the maximum number of concurrently
+            executing tasks that will be used to process the query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A ParallelQuery on which to set the limit on the degrees of parallelism.</param>
+            <param name="degreeOfParallelism">The degree of parallelism for the query.</param>
+            <returns>ParallelQuery representing the same query as source, with the limit on the degrees of parallelism set.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            WithDegreeOfParallelism is used multiple times in the query.
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="degreeOfParallelism"/> is less than 1 or greater than 63.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.WithCancellation``1(System.Linq.ParallelQuery{``0},System.Threading.CancellationToken)">
+            <summary>
+            Sets the <see cref="T:System.Threading.CancellationToken"/> to associate with the query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A ParallelQuery on which to set the option.</param>
+            <param name="cancellationToken">A cancellation token.</param>
+            <returns>ParallelQuery representing the same query as source, but with the <seealso cref="T:System.Threading.CancellationToken"/>
+            registered.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            WithCancellation is used multiple times in the query.
+            </exception>
+            <exception cref="T:System.ObjectDisposedException">
+            The <see cref="T:System.Threading.CancellationTokenSource"/> associated with the <paramref name="cancellationToken"/> has been disposed.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.WithExecutionMode``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelExecutionMode)">
+            <summary>
+            Sets the execution mode of the query.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A ParallelQuery on which to set the option.</param>
+            <param name="executionMode">The mode in which to execute the query.</param>
+            <returns>ParallelQuery representing the same query as source, but with the 
+            <seealso cref="T:System.Linq.ParallelExecutionMode"/> registered.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="executionMode"/> is not a valid <see cref="T:System.Linq.ParallelExecutionMode"/> value.
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            WithExecutionMode is used multiple times in the query.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.WithMergeOptions``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelMergeOptions)">
+            <summary>
+            Sets the merge options for this query, which specify how the query will buffer output.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A ParallelQuery on which to set the option.</param>
+            <param name="mergeOptions">The merge optiosn to set for this query.</param>
+            <returns>ParallelQuery representing the same query as source, but with the 
+            <seealso cref="T:System.Linq.ParallelMergeOptions"/> registered.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.ArgumentException">
+            <paramref name="mergeOptions"/> is not a valid <see cref="T:System.Linq.ParallelMergeOptions"/> value.
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            WithMergeOptions is used multiple times in the query.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Range(System.Int32,System.Int32)">
+            <summary>
+            Generates a parallel sequence of integral numbers within a specified range.
+            </summary>
+            <param name="start">The value of the first integer in the sequence.</param>
+            <param name="count">The number of sequential integers to generate.</param>
+            <returns>An <b>IEnumerable&lt;Int32&gt;</b> in C# or <B>IEnumerable(Of Int32)</B> in 
+            Visual Basic that contains a range of sequential integral numbers.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="count"/> is less than 0
+            -or-
+            <paramref name="start"/> + <paramref name="count"/> - 1 is larger than <see cref="M:System.Int32.MaxValue"/>.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Repeat``1(``0,System.Int32)">
+            <summary>
+            Generates a parallel sequence that contains one repeated value.
+            </summary>
+            <typeparam name="TResult">The type of the value to be repeated in the result sequence.</typeparam>
+            <param name="element">The value to be repeated.</param>
+            <param name="count">The number of times to repeat the value in the generated sequence.</param>
+            <returns>A sequence that contains a repeated value.</returns>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="count"/> is less than 0.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Empty``1">
+            <summary>
+            Returns an empty ParallelQuery{TResult} that has the specified type argument.
+            </summary>
+            <typeparam name="TResult">The type to assign to the type parameter of the returned 
+            generic sequence.</typeparam>
+            <returns>An empty sequence whose type argument is <typeparamref name="TResult"/>.</returns>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ForAll``1(System.Linq.ParallelQuery{``0},System.Action{``0})">
+            <summary>
+            Invokes in parallel the specified action for each element in the <paramref name="source"/>.
+            </summary>
+            <remarks>
+            This is an efficient way to process the output from a parallelized query because it does 
+            not require a merge step at the end.  However, order of execution is non-deterministic.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The <see cref="T:System.Linq.ParallelQuery`1"/> whose elements will be processed by 
+            <paramref name="action"/>.</param>
+            <param name="action">An Action to invoke on each element.</param>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="action"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Where``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Filters in parallel a sequence of values based on a predicate.
+            </summary>
+            <typeparam name="TSource">The type of the elements of source.</typeparam>
+            <param name="source">A sequence to filter.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>A sequence that contains elements from the input sequence that satisfy 
+            the condition.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Where``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,System.Boolean})">
+            <summary>
+            Filters in parallel a sequence of values based on a predicate. Each element's index is used in the logic of the predicate function.
+            </summary>
+            <typeparam name="TSource">The type of the elements of source.</typeparam>
+            <param name="source">A sequence to filter.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>A sequence that contains elements from the input sequence that satisfy the condition.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Select``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Projects in parallel each element of a sequence into a new form.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of elements resturned by <b>selector</b>.</typeparam>
+            <param name="source">A sequence of values to invoke a transform function on.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>A sequence whose elements are the result of invoking the transform function on each 
+            element of <paramref name="source"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Select``2(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,``1})">
+            <summary>
+            Projects in parallel each element of a sequence into a new form by incorporating the element's index.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of elements resturned by <b>selector</b>.</typeparam>
+            <param name="source">A sequence of values to invoke a transform function on.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>A sequence whose elements are the result of invoking the transform function on each 
+            element of <paramref name="source"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Zip``3(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``1},System.Func{``0,``1,``2})">
+            <summary>
+            Merges in parallel two sequences by using the specified predicate function.
+            </summary>
+            <typeparam name="TFirst">The type of the elements of the first sequence.</typeparam>
+            <typeparam name="TSecond">The type of the elements of the second sequence.</typeparam>
+            <typeparam name="TResult">The type of the return elements.</typeparam>
+            <param name="first">The first sequence to zip.</param>
+            <param name="second">The second sequence to zip.</param>
+            <param name="resultSelector">A function to create a result element from two matching elements.</param>
+            <returns>
+            A sequence that has elements of type <typeparamref name="TResult"/> that are obtained by performing 
+            resultSelector pairwise on two sequences. If the sequence lengths are unequal, this truncates
+            to the length of the shorter sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Zip``3(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``1,``2})">
+            <summary>
+            This Zip overload should never be called. 
+            This method is marked as obsolete and always throws 
+            <see cref="T:System.NotSupportedException"/> when invoked.
+            </summary>
+            <typeparam name="TFirst">This type parameter is not used.</typeparam>
+            <typeparam name="TSecond">This type parameter is not used.</typeparam>
+            <typeparam name="TResult">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <param name="resultSelector">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Zip with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Zip operator would appear to be bind to the parallel implementation, but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Join``4(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,``1,``3})">
+            <summary>
+            Correlates in parallel the elements of two sequences based on matching keys. 
+            The default equality comparer is used to compare keys.
+            </summary>
+            <typeparam name="TOuter">The type of the elements of the first sequence.</typeparam>
+            <typeparam name="TInner">The type of the elements of the second sequence.</typeparam>
+            <typeparam name="TKey">The type of the keys returned by the key selector functions.</typeparam>
+            <typeparam name="TResult">The type of the result elements.</typeparam>
+            <param name="outer">The first sequence to join.</param>
+            <param name="inner">The sequence to join to the first sequence.</param>
+            <param name="outerKeySelector">A function to extract the join key from each element of 
+            the first sequence.</param>
+            <param name="innerKeySelector">A function to extract the join key from each element of 
+            the second sequence.</param>
+            <param name="resultSelector">A function to create a result element from two matching elements.</param>
+            <returns>A sequence that has elements of type <typeparamref name="TResult"/> that are obtained by performing 
+            an inner join on two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="outer"/> or <paramref name="inner"/> or <paramref name="outerKeySelector"/> or
+            <paramref name="innerKeySelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Join``4(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,``1,``3})">
+            <summary>
+            This Join overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when invoked.
+            </summary>
+            <typeparam name="TOuter">This type parameter is not used.</typeparam>
+            <typeparam name="TInner">This type parameter is not used.</typeparam>
+            <typeparam name="TKey">This type parameter is not used.</typeparam>
+            <typeparam name="TResult">This type parameter is not used.</typeparam>
+            <param name="outer">This parameter is not used.</param>
+            <param name="inner">This parameter is not used.</param>
+            <param name="outerKeySelector">This parameter is not used.</param>
+            <param name="innerKeySelector">This parameter is not used.</param>
+            <param name="resultSelector">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage Join with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Join operator would appear to be binding to the parallel implementation, but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Join``4(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})">
+            <summary>
+            Correlates in parallel the elements of two sequences based on matching keys. 
+            A specified IEqualityComparer{T} is used to compare keys.
+            </summary>
+            <typeparam name="TOuter">The type of the elements of the first sequence.</typeparam>
+            <typeparam name="TInner">The type of the elements of the second sequence.</typeparam>
+            <typeparam name="TKey">The type of the keys returned by the key selector functions.</typeparam>
+            <typeparam name="TResult">The type of the result elements.</typeparam>
+            <param name="outer">The first sequence to join.</param>
+            <param name="inner">The sequence to join to the first sequence.</param>
+            <param name="outerKeySelector">A function to extract the join key from each element 
+            of the first sequence.</param>
+            <param name="innerKeySelector">A function to extract the join key from each element 
+            of the second sequence.</param>
+            <param name="resultSelector">A function to create a result element from two matching elements.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to hash and compare keys.</param>
+            <returns>A sequence that has elements of type <typeparamref name="TResult"/> that are obtained by performing 
+            an inner join on two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="outer"/> or <paramref name="inner"/> or <paramref name="outerKeySelector"/> or
+            <paramref name="innerKeySelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Join``4(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})">
+            <summary>
+            This Join overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when invoked.
+            </summary>
+            <typeparam name="TOuter">This type parameter is not used.</typeparam>
+            <typeparam name="TInner">This type parameter is not used.</typeparam>
+            <typeparam name="TKey">This type parameter is not used.</typeparam>
+            <typeparam name="TResult">This type parameter is not used.</typeparam>
+            <param name="outer">This parameter is not used.</param>
+            <param name="inner">This parameter is not used.</param>
+            <param name="outerKeySelector">This parameter is not used.</param>
+            <param name="innerKeySelector">This parameter is not used.</param>
+            <param name="resultSelector">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Join with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Join operator would appear to be binding to the parallel implementation, but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupJoin``4(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})">
+            <summary>
+            Correlates in parallel the elements of two sequences based on equality of keys and groups the results. 
+            The default equality comparer is used to compare keys.
+            </summary>
+            <typeparam name="TOuter">The type of the elements of the first sequence.</typeparam>
+            <typeparam name="TInner">The type of the elements of the second sequence.</typeparam>
+            <typeparam name="TKey">The type of the keys returned by the key selector functions.</typeparam>
+            <typeparam name="TResult">The type of the result elements.</typeparam>
+            <param name="outer">The first sequence to join.</param>
+            <param name="inner">The sequence to join to the first sequence.</param>
+            <param name="outerKeySelector">A function to extract the join key from each element 
+            of the first sequence.</param>
+            <param name="innerKeySelector">A function to extract the join key from each element 
+            of the second sequence.</param>
+            <param name="resultSelector">A function to create a result element from an element from 
+            the first sequence and a collection of matching elements from the second sequence.</param>
+            <returns>A sequence that has elements of type <typeparamref name="TResult"/> that are obtained by performing 
+            a grouped join on two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="outer"/> or <paramref name="inner"/> or <paramref name="outerKeySelector"/> or
+            <paramref name="innerKeySelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupJoin``4(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})">
+             <summary>
+             This GroupJoin overload should never be called. 
+             This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+             </summary>
+             <typeparam name="TOuter">This type parameter is not used.</typeparam>
+             <typeparam name="TInner">This type parameter is not used.</typeparam>
+             <typeparam name="TKey">This type parameter is not used.</typeparam>
+             <typeparam name="TResult">This type parameter is not used.</typeparam>
+             <param name="outer">This parameter is not used.</param>
+             <param name="inner">This parameter is not used.</param>
+             <param name="outerKeySelector">This parameter is not used.</param>
+             <param name="innerKeySelector">This parameter is not used.</param>
+             <param name="resultSelector">This parameter is not used.</param>
+             <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+             <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+             <remarks>
+             This overload exists to disallow usage of GroupJoin with a left data source of type
+             <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+             Otherwise, the GroupJoin operator would appear to be binding to the parallel implementation, 
+             but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupJoin``4(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})">
+            <summary>
+            Correlates in parallel the elements of two sequences based on key equality and groups the results. 
+            A specified IEqualityComparer{T} is used to compare keys.
+            </summary>
+            <typeparam name="TOuter">The type of the elements of the first sequence.</typeparam>
+            <typeparam name="TInner">The type of the elements of the second sequence.</typeparam>
+            <typeparam name="TKey">The type of the keys returned by the key selector functions.</typeparam>
+            <typeparam name="TResult">The type of the result elements.</typeparam>
+            <param name="outer">The first sequence to join.</param>
+            <param name="inner">The sequence to join to the first sequence.</param>
+            <param name="outerKeySelector">A function to extract the join key from each element 
+            of the first sequence.</param>
+            <param name="innerKeySelector">A function to extract the join key from each element 
+            of the second sequence.</param>
+            <param name="resultSelector">A function to create a result element from an element from 
+            the first sequence and a collection of matching elements from the second sequence.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to hash and compare keys.</param>
+            <returns>A sequence that has elements of type <typeparamref name="TResult"/> that are obtained by performing 
+            a grouped join on two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="outer"/> or <paramref name="inner"/> or <paramref name="outerKeySelector"/> or
+            <paramref name="innerKeySelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupJoin``4(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``2},System.Func{``1,``2},System.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})">
+            <summary>
+            This GroupJoin overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TOuter">This type parameter is not used.</typeparam>
+            <typeparam name="TInner">This type parameter is not used.</typeparam>
+            <typeparam name="TKey">This type parameter is not used.</typeparam>
+            <typeparam name="TResult">This type parameter is not used.</typeparam>
+            <param name="outer">This parameter is not used.</param>
+            <param name="inner">This parameter is not used.</param>
+            <param name="outerKeySelector">This parameter is not used.</param>
+            <param name="innerKeySelector">This parameter is not used.</param>
+            <param name="resultSelector">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of GroupJoin with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the GroupJoin operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SelectMany``2(System.Linq.ParallelQuery{``0},System.Func{``0,System.Collections.Generic.IEnumerable{``1}})">
+            <summary>
+            Projects in parallel each element of a sequence to an IEnumerable{T} 
+            and flattens the resulting sequences into one sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of the elements of the sequence returned by <B>selector</B>.</typeparam>
+            <param name="source">A sequence of values to project.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>A sequence whose elements are the result of invoking the one-to-many transform 
+            function on each element of the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SelectMany``2(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})">
+            <summary>
+            Projects in parallel each element of a sequence to an IEnumerable{T}, and flattens the resulting 
+            sequences into one sequence. The index of each source element is used in the projected form of 
+            that element.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of the elements of the sequence returned by <B>selector</B>.</typeparam>
+            <param name="source">A sequence of values to project.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>A sequence whose elements are the result of invoking the one-to-many transform 
+            function on each element of the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SelectMany``3(System.Linq.ParallelQuery{``0},System.Func{``0,System.Collections.Generic.IEnumerable{``1}},System.Func{``0,``1,``2})">
+            <summary>
+            Projects each element of a sequence to an IEnumerable{T}, 
+            flattens the resulting sequences into one sequence, and invokes a result selector 
+            function on each element therein.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TCollection">The type of the intermediate elements collected by <paramref name="collectionSelector"/>.</typeparam>
+            <typeparam name="TResult"></typeparam>
+            <param name="source">A sequence of values to project.</param>
+            <param name="collectionSelector">A transform function to apply to each source element; 
+            the second parameter of the function represents the index of the source element.</param>
+            <param name="resultSelector">A function to create a result element from an element from 
+            the first sequence and a collection of matching elements from the second sequence.</param>
+            <returns>A sequence whose elements are the result of invoking the one-to-many transform 
+            function <paramref name="collectionSelector"/> on each element of <paramref name="source"/> and then mapping 
+            each of those sequence elements and their corresponding source element to a result element.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="collectionSelector"/> or
+            <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SelectMany``3(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},System.Func{``0,``1,``2})">
+            <summary>
+            Projects each element of a sequence to an IEnumerable{T}, flattens the resulting 
+            sequences into one sequence, and invokes a result selector function on each element 
+            therein. The index of each source element is used in the intermediate projected 
+            form of that element.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TCollection">The type of the intermediate elements collected by 
+            <paramref name="collectionSelector"/>.</typeparam>
+            <typeparam name="TResult">The type of elements to return.</typeparam>
+            <param name="source">A sequence of values to project.</param>
+            <param name="collectionSelector">A transform function to apply to each source element; 
+            the second parameter of the function represents the index of the source element.</param>
+            <param name="resultSelector">A function to create a result element from an element from 
+            the first sequence and a collection of matching elements from the second sequence.</param>
+            <returns>
+            A sequence whose elements are the result of invoking the one-to-many transform 
+            function <paramref name="collectionSelector"/> on each element of <paramref name="source"/> and then mapping 
+            each of those sequence elements and their corresponding source element to a 
+            result element.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="collectionSelector"/> or
+            <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.OrderBy``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Sorts in parallel the elements of a sequence in ascending order according to a key.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort. 
+            To achieve a stable sort, change a query of the form:
+            <code>var ordered = source.OrderBy((e) => e.k);</code>
+            to instead be formed as:
+            <code>var ordered = source.Select((e,i) => new { E=e, I=i }).OrderBy((v) => v.i).Select((v) => v.e);</code>
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence of values to order.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.OrderBy``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IComparer{``1})">
+            <summary>
+            Sorts in parallel the elements of a sequence in ascending order by using a specified comparer.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence of values to order.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="comparer">An IComparer{TKey} to compare keys.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted according 
+            to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.OrderByDescending``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Sorts in parallel the elements of a sequence in descending order according to a key.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence of values to order.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            descending according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.OrderByDescending``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IComparer{``1})">
+            <summary>
+            Sorts the elements of a sequence in descending order by using a specified comparer.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence of values to order.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="comparer">An IComparer{TKey} to compare keys.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted descending 
+            according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ThenBy``2(System.Linq.OrderedParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Performs in parallel a subsequent ordering of the elements in a sequence 
+            in ascending order according to a key.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource} than 
+            contains elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are 
+            sorted according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ThenBy``2(System.Linq.OrderedParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IComparer{``1})">
+            <summary>
+            Performs in parallel a subsequent ordering of the elements in a sequence in 
+            ascending order by using a specified comparer.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource} that contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="comparer">An IComparer{TKey} to compare keys.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ThenByDescending``2(System.Linq.OrderedParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Performs in parallel a subsequent ordering of the elements in a sequence in 
+            descending order, according to a key.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource} than contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            descending according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ThenByDescending``2(System.Linq.OrderedParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IComparer{``1})">
+            <summary>
+            Performs in parallel a subsequent ordering of the elements in a sequence in descending 
+            order by using a specified comparer.
+            </summary>
+            <remarks>
+            In contrast to the sequential implementation, this is not a stable sort.
+            See the remarks for OrderBy(ParallelQuery{TSource}, Func{TSource,TKey}) for 
+            an approach to implementing a stable sort.
+            </remarks>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource} than contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="comparer">An IComparer{TKey} to compare keys.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            descending according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified key selector function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource}than contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <returns>An OrderedParallelQuery{TSource}whose elements are sorted 
+            descending according to a key.</returns>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified key selector function and compares the keys by using a specified comparer.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>>.</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource} than contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="comparer">An IComparer{TSource} to compare keys.</param>
+            <returns>An OrderedParallelQuery{TSource} whose elements are sorted 
+            descending according to a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified key selector function and 
+            projects the elements for each group by using a specified function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the elements in the IGrouping</typeparam>
+            <param name="source">An OrderedParallelQuery&lt;(Of &lt;(TElement&gt;)&gt;) than contains 
+            elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="elementSelector">A function to map each source element to an element in an  IGrouping.</param>
+            <returns>A ParallelQuery&lt;IGrouping&lt;TKey, TElement&gt;&gt; in C# or 
+            ParallelQuery(Of IGrouping(Of TKey, TElement)) in Visual Basic where each IGrouping 
+            generic object contains a collection of objects of type <typeparamref name="TElement"/> and a key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a key selector function. 
+            The keys are compared by using a comparer and each group's elements are projected by 
+            using a specified function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the elements in the IGrouping</typeparam>
+            <param name="source">An OrderedParallelQuery{TSource}than contains elements to sort.</param>
+            <param name="keySelector">A function to extract a key from an element.</param>
+            <param name="elementSelector">A function to map each source element to an element in an  IGrouping.</param>
+            <param name="comparer">An IComparer{TSource} to compare keys.</param>
+            <returns>
+            A ParallelQuery{IGrouping{TKey, TElement}} in C# or 
+            ParallelQuery(Of IGrouping(Of TKey, TElement)) in Visual Basic where each IGrouping 
+            generic object contains a collection of objects of type <typeparamref name="TElement"/> and a key.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified 
+            key selector function and creates a result value from each group and its key.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TResult">The type of the result value returned by <paramref name="resultSelector"/>.</typeparam>
+            <param name="source">A sequence whose elements to group.</param>
+            <param name="keySelector">A function to extract the key for each element.</param>
+            <param name="resultSelector">A function to create a result value from each group.</param>
+            <returns>A collection of elements of type <typeparamref name="TResult"/> where each element represents a 
+            projection over a group and its key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified key selector function 
+            and creates a result value from each group and its key. The keys are compared 
+            by using a specified comparer.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TResult">The type of the result value returned by <paramref name="resultSelector"/>.</typeparam>
+            <param name="source">A sequence whose elements to group.</param>
+            <param name="keySelector">A function to extract the key for each element.</param>
+            <param name="resultSelector">A function to create a result value from each group.</param>
+            <param name="comparer">An IEqualityComparer{TKey} to compare keys.</param>
+            <returns>
+            An <B>ParallelQuery&lt;IGrouping&lt;TKey, TResult&gt;&gt;</B> in C# or 
+            <B>ParallelQuery(Of IGrouping(Of TKey, TResult))</B> in Visual Basic where each 
+            IGrouping&lt;(Of &lt;(TKey, TResult&gt;)&gt;) object contains a collection of objects 
+            of type <typeparamref name="TResult"/> and a key.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``4(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})">
+            <summary>
+            Groups in parallel the elements of a sequence according to a specified key 
+            selector function and creates a result value from each group and its key. 
+            The elements of each group are projected by using a specified function.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the elements in each 
+            IGrouping{TKey, TElement}.</typeparam>
+            <typeparam name="TResult">The type of the result value returned by <paramref name="resultSelector"/>.</typeparam>
+            <param name="source">A sequence whose elements to group.</param>
+            <param name="keySelector">A function to extract the key for each element.</param>
+            <param name="elementSelector">A function to map each source element to an element in an 
+            IGrouping&lt;TKey, TElement&gt;.</param>
+            <param name="resultSelector">A function to create a result value from each group.</param>
+            <returns>A collection of elements of type <typeparamref name="TElement"/> where each element represents a 
+            projection over a group and its key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="elementSelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.GroupBy``4(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Groups the elements of a sequence according to a specified key selector function and 
+            creates a result value from each group and its key. Key values are compared by using a 
+            specified comparer, and the elements of each group are projected by using a specified function.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the elements in each 
+            IGrouping{TKey, TElement}.</typeparam>
+            <typeparam name="TResult">The type of the result value returned by <paramref name="resultSelector"/>.</typeparam>
+            <param name="source">A sequence whose elements to group.</param>
+            <param name="keySelector">A function to extract the key for each element.</param>
+            <param name="elementSelector">A function to map each source element to an element in an 
+            IGrouping{Key, TElement}.</param>
+            <param name="resultSelector">A function to create a result value from each group.</param>
+            <param name="comparer">An IEqualityComparer{TKey} to compare keys.</param>
+            <returns>A collection of elements of type <typeparamref name="TResult"/> where each element represents a 
+            projection over a group and its key.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or
+            <paramref name="elementSelector"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.PerformSequentialAggregation``2(System.Linq.ParallelQuery{``0},``1,System.Boolean,System.Func{``1,``0,``1})">
+            <summary>
+            Run an aggregation sequentially. If the user-provided reduction function throws an exception, wrap
+            it with an AggregateException.
+            </summary>
+            <param name="source"></param>
+            <param name="seed"></param>
+            <param name="seedIsSpecified">
+            if true, use the seed provided in the method argument
+            if false, use the first element of the sequence as the seed instead
+            </param>
+            <param name="func"></param>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Aggregate``1(System.Linq.ParallelQuery{``0},System.Func{``0,``0,``0})">
+            <summary>
+            Applies in parallel an accumulator function over a sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence to aggregate over.</param>
+            <param name="func">An accumulator function to be invoked on each element.</param>
+            <returns>The final accumulator value.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="func"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Aggregate``2(System.Linq.ParallelQuery{``0},``1,System.Func{``1,``0,``1})">
+            <summary>
+            Applies in parallel an accumulator function over a sequence. 
+            The specified seed value is used as the initial accumulator value.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TAccumulate">The type of the accumulator value.</typeparam>
+            <param name="source">A sequence to aggregate over.</param>
+            <param name="seed">The initial accumulator value.</param>
+            <param name="func">An accumulator function to be invoked on each element.</param>
+            <returns>The final accumulator value.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="func"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Aggregate``3(System.Linq.ParallelQuery{``0},``1,System.Func{``1,``0,``1},System.Func{``1,``2})">
+            <summary>
+            Applies in parallel an accumulator function over a sequence. The specified 
+            seed value is used as the initial accumulator value, and the specified 
+            function is used to select the result value.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TAccumulate">The type of the accumulator value.</typeparam>
+            <typeparam name="TResult">The type of the resulting value.</typeparam>
+            <param name="source">A sequence to aggregate over.</param>
+            <param name="seed">The initial accumulator value.</param>
+            <param name="func">An accumulator function to be invoked on each element.</param>
+            <param name="resultSelector">A function to transform the final accumulator value 
+            into the result value.</param>
+            <returns>The transformed final accumulator value.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="func"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Aggregate``3(System.Linq.ParallelQuery{``0},``1,System.Func{``1,``0,``1},System.Func{``1,``1,``1},System.Func{``1,``2})">
+            <summary>
+            Applies in parallel an accumulator function over a sequence. This overload is not
+            available in the sequential implementation.
+            </summary>
+            <remarks>
+            This overload is specific to processing a parallelized query. A parallelized query may 
+            partition the data source sequence into several sub-sequences (partitions). 
+            The <paramref name="updateAccumulatorFunc"/> is invoked on each element within partitions. 
+            Each partition then yields a single accumulated result. The <paramref name="combineAccumulatorsFunc"/>
+            is then invoked on the results of each partition to yield a single element. This element is then
+            transformed by the <paramref name="resultSelector"/> function.
+            </remarks>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TAccumulate">The type of the accumulator value.</typeparam>
+            <typeparam name="TResult">The type of the resulting value.</typeparam>
+            <param name="source">A sequence to aggregate over.</param>
+            <param name="seed">The initial accumulator value.</param>
+            <param name="updateAccumulatorFunc">
+            An accumulator function to be invoked on each element in a partition.
+            </param>
+            <param name="combineAccumulatorsFunc">
+            An accumulator function to be invoked on the yielded element from each partition.
+            </param>
+            <param name="resultSelector">
+            A function to transform the final accumulator value into the result value.
+            </param>
+            <returns>The transformed final accumulator value.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="updateAccumulatorFunc"/> 
+            or <paramref name="combineAccumulatorsFunc"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Aggregate``3(System.Linq.ParallelQuery{``0},System.Func{``1},System.Func{``1,``0,``1},System.Func{``1,``1,``1},System.Func{``1,``2})">
+            <summary>
+            Applies in parallel an accumulator function over a sequence.  This overload is not
+            available in the sequential implementation.
+            </summary>
+            <remarks>
+            This overload is specific to parallelized queries. A parallelized query may partition the data source sequence
+            into several sub-sequences (partitions). The <paramref name="updateAccumulatorFunc"/> is invoked 
+            on each element within partitions. Each partition then yields a single accumulated result. 
+            The <paramref name="combineAccumulatorsFunc"/>
+            is then invoked on the results of each partition to yield a single element. This element is then
+            transformed by the <paramref name="resultSelector"/> function.
+            </remarks>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TAccumulate">The type of the accumulator value.</typeparam>
+            <typeparam name="TResult">The type of the resulting value.</typeparam>
+            <param name="source">A sequence to aggregate over.</param>
+            <param name="seedFactory">
+            A function that returns the initial accumulator value.
+            </param>
+            <param name="updateAccumulatorFunc">
+            An accumulator function to be invoked on each element in a partition.
+            </param>
+            <param name="combineAccumulatorsFunc">
+            An accumulator function to be invoked on the yielded element from each partition. 
+            </param>
+            <param name="resultSelector">
+            A function to transform the final accumulator value into the result value.
+            </param>
+            <returns>The transformed final accumulator value.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="seedFactory"/> or <paramref name="updateAccumulatorFunc"/> 
+            or <paramref name="combineAccumulatorsFunc"/> or <paramref name="resultSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Count``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the number of elements in a parallel sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence that contains elements to be counted.</param>
+            <returns>The number of elements in the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The number of elements in source is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Count``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns a number that represents how many elements in the specified 
+            parallel sequence satisfy a condition.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence that contains elements to be counted.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            A number that represents how many elements in the sequence satisfy the condition 
+            in the predicate function.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The number of elements in source is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.LongCount``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns an Int64 that represents the total number of elements in a parallel sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence that contains elements to be counted.</param>
+            <returns>The number of elements in the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The number of elements in source is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.LongCount``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns an Int64 that represents how many elements in a parallel sequence satisfy a condition.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence that contains elements to be counted.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            A number that represents how many elements in the sequence satisfy the condition 
+            in the predicate function.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The number of elements in source is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Int32})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Nullable{System.Int32}})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Int64})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Nullable{System.Int64}})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Single})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Nullable{System.Single}})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Double})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Nullable{System.Double}})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Decimal})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Decimal.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery{System.Nullable{System.Decimal}})">
+            <summary>
+            Computes in parallel the sum of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Decimal.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int32}})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int64})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int64}})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Single})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Single}})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Double})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Double}})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Decimal})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Decimal.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Sum``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Decimal}})">
+            <summary>
+            Computes in parallel the sum of the sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to calculate the sum of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The sum of the values in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum is larger than <see cref="M:System.Decimal.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Int32})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Nullable{System.Int32}})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Int64})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Nullable{System.Int64}})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Single})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Nullable{System.Single}})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Double})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Nullable{System.Double}})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Decimal})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min(System.Linq.ParallelQuery{System.Nullable{System.Decimal}})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the minimum value in a parallel sequence of values.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements and <typeparamref name="TSource"/> is a non-nullable value type.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int32}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int64})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int64}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Single})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Single}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Double})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Double}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Decimal})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Decimal}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Min``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the minimum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of the value returned by <paramref name="selector"/>.</typeparam>
+            <param name="source">A sequence of values to determine the minimum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The minimum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements and <typeparamref name="TResult"/> is a non-nullable value type.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Int32})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Nullable{System.Int32}})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Int64})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Nullable{System.Int64}})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Single})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Nullable{System.Single}})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Double})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Nullable{System.Double}})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Decimal})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery{System.Nullable{System.Decimal}})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the maximum value in a parallel sequence of values.
+            </summary>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements and <typeparam name="TSource"/> is a non-nullable value type.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int32}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int64})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int64}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Single})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Single}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Double})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Double}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Decimal})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Decimal}})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Max``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Invokes in parallel a transform function on each element of a 
+            sequence and returns the maximum value.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TResult">The type of the value returned by <paramref name="selector"/>.</typeparam>
+            <param name="source">A sequence of values to determine the maximum value of.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The maximum value in the sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements and <typeparamref name="TResult"/> is a non-nullable value type.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Int32})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Nullable{System.Int32}})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Int64})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Nullable{System.Int64}})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Single})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Nullable{System.Single}})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Double})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Nullable{System.Double}})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <exception cref="T:System.ArgumentNullException">
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Decimal})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average(System.Linq.ParallelQuery{System.Nullable{System.Decimal}})">
+            <summary>
+            Computes in parallel the average of a sequence of values.
+            </summary>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int32}})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int64})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int32.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Int64}})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            The sum or count of the elements in the sequence is larger than <see cref="M:System.Int64.MaxValue"/>.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Single})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Single}})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Double})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Double}})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Decimal})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Average``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Nullable{System.Decimal}})">
+            <summary>
+            Computes in parallel the average of a sequence of values that are obtained 
+            by invoking a transform function on each element of the input sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values that are used to calculate an average.</param>
+            <param name="selector">A transform function to apply to each element.</param>
+            <returns>The average of the sequence of values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="selector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Any``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Determines in parallel whether any element of a sequence satisfies a condition.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">An IEnumerable whose elements to apply the predicate to.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            true if any elements in the source sequence pass the test in the specified predicate; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Any``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Determines whether a parallel sequence contains any elements.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The IEnumerable to check for emptiness.</param>
+            <returns>true if the source sequence contains any elements; otherwise, false.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.All``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Determines in parallel whether all elements of a sequence satisfy a condition.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence whose elements to apply the predicate to.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            true if all elements in the source sequence pass the test in the specified predicate; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Contains``1(System.Linq.ParallelQuery{``0},``0)">
+            <summary>
+            Determines in parallel whether a sequence contains a specified element 
+            by using the default equality comparer.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence in which to locate a value.</param>
+            <param name="value">The value to locate in the sequence.</param>
+            <returns>
+            true if the source sequence contains an element that has the specified value; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Contains``1(System.Linq.ParallelQuery{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Determines in parallel whether a sequence contains a specified element by using a 
+            specified IEqualityComparer{T}.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence in which to locate a value.</param>
+            <param name="value">The value to locate in the sequence.</param>
+            <param name="comparer">An equality comparer to compare values.</param>
+            <returns>
+            true if the source sequence contains an element that has the specified value; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Take``1(System.Linq.ParallelQuery{``0},System.Int32)">
+            <summary>
+            Returns a specified number of contiguous elements from the start of a parallel sequence.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="count">The number of elements to return.</param>
+            <returns>
+            A sequence that contains the specified number of elements from the start of the input sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.TakeWhile``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns elements from a parallel sequence as long as a specified condition is true.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            A sequence that contains the elements from the input sequence that occur before 
+            the element at which the test no longer passes.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.TakeWhile``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,System.Boolean})">
+            <summary>
+            Returns elements from a parallel sequence as long as a specified condition is true. 
+            The element's index is used in the logic of the predicate function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="predicate">
+            A function to test each source element for a condition; the second parameter of the 
+            function represents the index of the source element.
+            </param>
+            <returns>
+            A sequence that contains elements from the input sequence that occur before 
+            the element at which the test no longer passes.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Skip``1(System.Linq.ParallelQuery{``0},System.Int32)">
+            <summary>
+            Bypasses a specified number of elements in a parallel sequence and then returns the remaining elements.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="count">The number of elements to skip before returning the remaining elements.</param>
+            <returns>
+            A sequence that contains the elements that occur after the specified index in the input sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SkipWhile``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Bypasses elements in a parallel sequence as long as a specified 
+            condition is true and then returns the remaining elements.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>A sequence that contains the elements from the input sequence starting at 
+            the first element in the linear series that does not pass the test specified by 
+            <B>predicate</B>.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SkipWhile``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Int32,System.Boolean})">
+            <summary>
+            Bypasses elements in a parallel sequence as long as a specified condition is true and 
+            then returns the remaining elements. The element's index is used in the logic of 
+            the predicate function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return elements from.</param>
+            <param name="predicate">
+            A function to test each source element for a condition; the 
+            second parameter of the function represents the index of the source element.
+            </param>
+            <returns>
+            A sequence that contains the elements from the input sequence starting at the 
+            first element in the linear series that does not pass the test specified by 
+            <B>predicate</B>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Concat``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0})">
+            <summary>
+            Concatenates two parallel sequences.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">The first sequence to concatenate.</param>
+            <param name="second">The sequence to concatenate to the first sequence.</param>
+            <returns>A sequence that contains the concatenated elements of the two input sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Concat``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            This Concat overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Concat with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Concat operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SequenceEqual``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0})">
+            <summary>
+            Determines whether two parallel sequences are equal by comparing the elements by using 
+            the default equality comparer for their type.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">A sequence to compare to <b>second</b>.</param>
+            <param name="second">A sequence to compare to the first input sequence.</param>
+            <returns>
+            true if the two source sequences are of equal length and their corresponding elements 
+            are equal according to the default equality comparer for their type; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SequenceEqual``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            This SequenceEqual overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">Thrown every time this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of SequenceEqual with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the SequenceEqual operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SequenceEqual``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Determines whether two parallel sequences are equal by comparing their elements by 
+            using a specified IEqualityComparer{T}.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">A sequence to compare to <paramref name="second"/>.</param>
+            <param name="second">A sequence to compare to the first input sequence.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to use to compare elements.</param>
+            <returns>
+            true if the two source sequences are of equal length and their corresponding 
+            elements are equal according to the default equality comparer for their type; otherwise, false.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.DisposeEnumerator``1(System.Collections.Generic.IEnumerator{``0},System.Linq.Parallel.CancellationState)">
+            <summary>
+            A helper method for SequenceEqual to dispose an enumerator. If an exception is thrown by the disposal, 
+            it gets wrapped into an AggregateException, unless it is an OCE with the query's CancellationToken.
+            </summary>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SequenceEqual``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            This SequenceEqual overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">Thrown every time this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of SequenceEqual with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the SequenceEqual operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Distinct``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns distinct elements from a parallel sequence by using the 
+            default equality comparer to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to remove duplicate elements from.</param>
+            <returns>A sequence that contains distinct elements from the source sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Distinct``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Returns distinct elements from a parallel sequence by using a specified 
+            IEqualityComparer{T} to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to remove duplicate elements from.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare values.</param>
+            <returns>A sequence that contains distinct elements from the source sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Union``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0})">
+            <summary>
+            Produces the set union of two parallel sequences by using the default equality comparer.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">A sequence whose distinct elements form the first set for the union.</param>
+            <param name="second">A sequence whose distinct elements form the second set for the union.</param>
+            <returns>A sequence that contains the elements from both input sequences, excluding duplicates.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Union``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            This Union overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Union with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Union operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Union``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Produces the set union of two parallel sequences by using a specified IEqualityComparer{T}.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">A sequence whose distinct elements form the first set for the union.</param>
+            <param name="second">A sequence whose distinct elements form the second set for the union.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare values.</param>
+            <returns>A sequence that contains the elements from both input sequences, excluding duplicates.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Union``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            This Union overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Union with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Union operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Intersect``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0})">
+            <summary>
+            Produces the set intersection of two parallel sequences by using the 
+            default equality comparer to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first"
+            >A sequence whose distinct elements that also appear in <paramref name="second"/> will be returned.
+            </param>
+            <param name="second">
+            A sequence whose distinct elements that also appear in the first sequence will be returned.
+            </param>
+            <returns>A sequence that contains the elements that form the set intersection of two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Intersect``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            This Intersect overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Intersect with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Intersect operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Intersect``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Produces the set intersection of two parallel sequences by using 
+            the specified IEqualityComparer{T} to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">
+            A sequence whose distinct elements that also appear in <paramref name="second"/> will be returned.
+            </param>
+            <param name="second">
+            A sequence whose distinct elements that also appear in the first sequence will be returned.
+            </param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare values.</param>
+            <returns>A sequence that contains the elements that form the set intersection of two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Intersect``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            This Intersect overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Intersect with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Intersect operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Except``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0})">
+            <summary>
+            Produces the set difference of two parallel sequences by using 
+            the default equality comparer to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">
+            A sequence whose elements that are not also in <paramref name="second"/> will be returned.
+            </param>
+            <param name="second">
+            A sequence whose elements that also occur in the first sequence will cause those 
+            elements to be removed from the returned sequence.
+            </param>
+            <returns>A sequence that contains the set difference of the elements of two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Except``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0})">
+            <summary>
+            This Except overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Except with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Except operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Except``1(System.Linq.ParallelQuery{``0},System.Linq.ParallelQuery{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            Produces the set difference of two parallel sequences by using the 
+            specified IEqualityComparer{T} to compare values.
+            </summary>
+            <typeparam name="TSource">The type of the elements of the input sequences.</typeparam>
+            <param name="first">A sequence whose elements that are not also in <paramref name="second"/> will be returned.</param>
+            <param name="second">
+            A sequence whose elements that also occur in the first sequence will cause those elements 
+            to be removed from the returned sequence.
+            </param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare values.</param>
+            <returns>A sequence that contains the set difference of the elements of two sequences.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="first"/> or <paramref name="second"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Except``1(System.Linq.ParallelQuery{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
+            <summary>
+            This Except overload should never be called. 
+            This method is marked as obsolete and always throws <see cref="T:System.NotSupportedException"/> when called.
+            </summary>
+            <typeparam name="TSource">This type parameter is not used.</typeparam>
+            <param name="first">This parameter is not used.</param>
+            <param name="second">This parameter is not used.</param>
+            <param name="comparer">This parameter is not used.</param>
+            <returns>This overload always throws a <see cref="T:System.NotSupportedException"/>.</returns>
+            <exception cref="T:System.NotSupportedException">The exception that occurs when this method is called.</exception>
+            <remarks>
+            This overload exists to disallow usage of Except with a left data source of type
+            <see cref="T:System.Linq.ParallelQuery`1"/> and a right data source of type <see cref="T:System.Collections.Generic.IEnumerable`1"/>.
+            Otherwise, the Except operator would appear to be binding to the parallel implementation, 
+            but would in reality bind to the sequential implementation.
+            </remarks>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.AsEnumerable``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Converts a <see cref="T:System.Linq.ParallelQuery`1"/> into an 
+            <see cref="T:System.Collections.Generic.IEnumerable`1"/> to force sequential
+            evaluation of the query.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to type as <see cref="T:System.Collections.Generic.IEnumerable`1"/>.</param>
+            <returns>The input sequence types as <see cref="T:System.Collections.Generic.IEnumerable`1"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToArray``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Creates an array from a ParallelQuery{T}.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence to create an array from.</param>
+            <returns>An array that contains the elements from the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToList``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Creates a List{T} from an ParallelQuery{T}.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence to create a List&lt;(Of &lt;(T&gt;)&gt;) from.</param>
+            <returns>A List&lt;(Of &lt;(T&gt;)&gt;) that contains elements from the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to 
+            a specified key selector function.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence to create a Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <returns>A Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) that contains keys and values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            <paramref name="keySelector"/> produces a key that is a null reference (Nothing in Visual Basic).
+            -or-
+            <paramref name="keySelector"/> produces duplicate keys for two elements.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to a 
+            specified key selector function and key comparer.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">A sequence to create a Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare keys.</param>
+            <returns>A Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) that contains keys and values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            <paramref name="keySelector"/> produces a key that is a null reference (Nothing in Visual Basic).
+            -or-
+            <paramref name="keySelector"/> produces duplicate keys for two elements.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})">
+            <summary>
+            Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to specified 
+            key selector and element selector functions.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the value returned by <paramref name="elementSelector"/>.</typeparam>
+            <param name="source">A sequence to create a Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="elementSelector">
+            A transform function to produce a result element value from each element.
+            </param>
+            <returns>
+            A Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) that contains values of type <typeparamref name="TElement"/> 
+            selected from the input sequence
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            <paramref name="keySelector"/> produces a key that is a null reference (Nothing in Visual Basic).
+            -or-
+            <paramref name="keySelector"/> produces duplicate keys for two elements.
+            -or- 
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Creates a Dictionary{TKey,TValue from a ParallelQuery{T} according to a 
+            specified key selector function, a comparer, and an element selector function.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the value returned by <paramref name="elementSelector"/>.</typeparam>
+            <param name="source">A sequence to create a Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="elementSelector">A transform function to produce a result element 
+            value from each element.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare keys.</param>
+            <returns>
+            A Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;) that contains values of type <typeparamref name="TElement"/> 
+            selected from the input sequence
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            <paramref name="keySelector"/> produces a key that is a null reference (Nothing in Visual Basic).
+            -or-
+            <paramref name="keySelector"/> produces duplicate keys for two elements.
+            -or-
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})">
+            <summary>
+            Creates an ILookup{TKey,T} from a ParallelQuery{T} according to a specified key selector function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">The sequence to create a Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <returns>A Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) that contains keys and values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Creates an ILookup{TKey,T} from a ParallelQuery{T} according to a specified 
+            key selector function and key comparer.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <param name="source">The sequence to create a Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare keys.</param>
+            <returns>A Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) that contains keys and values.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})">
+            <summary>
+            Creates an ILookup{TKey,TElement} from a ParallelQuery{T} according to specified 
+            key selector and element selector functions.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the value returned by <paramref name="elementSelector"/>.</typeparam>
+            <param name="source">The sequence to create a Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="elementSelector">
+            A transform function to produce a result element value from each element.
+            </param>
+            <returns>
+            A Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) that contains values of type TElement 
+            selected from the input sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})">
+            <summary>
+            Creates an ILookup{TKey,TElement} from a ParallelQuery{T} according to 
+            a specified key selector function, a comparer and an element selector function.
+            </summary>
+            <typeparam name="TSource">The type of elements of <paramref name="source"/>.</typeparam>
+            <typeparam name="TKey">The type of the key returned by <paramref name="keySelector"/>.</typeparam>
+            <typeparam name="TElement">The type of the value returned by <paramref name="elementSelector"/>.</typeparam>
+            <param name="source">The sequence to create a Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) from.</param>
+            <param name="keySelector">A function to extract a key from each element.</param>
+            <param name="elementSelector">
+            A transform function to produce a result element value from each element.
+            </param>
+            <param name="comparer">An IEqualityComparer&lt;(Of &lt;(T&gt;)&gt;) to compare keys.</param>
+            <returns>
+            A Lookup&lt;(Of &lt;(TKey, TElement&gt;)&gt;) that contains values of type TElement selected 
+            from the input sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="keySelector"/> or <paramref name="elementSelector"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Reverse``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Inverts the order of the elements in a parallel sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence of values to reverse.</param>
+            <returns>A sequence whose elements correspond to those of the input sequence in reverse order.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.OfType``1(System.Linq.ParallelQuery)">
+            <summary>
+            Filters the elements of a ParallelQuery based on a specified type.
+            </summary>
+            <typeparam name="TResult">The type to filter the elements of the sequence on.</typeparam>
+            <param name="source">The sequence whose elements to filter.</param>
+            <returns>A sequence that contains elements from the input sequence of type <typeparamref name="TResult"/>.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Cast``1(System.Linq.ParallelQuery)">
+            <summary>
+            Converts the elements of a ParallelQuery to the specified type.
+            </summary>
+            <typeparam name="TResult">The type to convert the elements of <paramref name="source"/> to.</typeparam>
+            <param name="source">The sequence that contains the elements to be converted.</param>
+            <returns>
+            A sequence that contains each element of the source sequence converted to the specified type.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.First``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the first element of a parallel sequence.</summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the first element of.</param>
+            <returns>The first element in the specified sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.First``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the first element in a parallel sequence that satisfies a specified condition.
+            </summary>
+            <remarks>There's a temporary difference from LINQ to Objects, this does not throw
+            ArgumentNullException when the predicate is null.</remarks>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return an element from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>The first element in the sequence that passes the test in the specified predicate function.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            No element in <paramref name="source"/> satisfies the condition in <paramref name="predicate"/>.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.FirstOrDefault``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the first element of a parallel sequence, or a default value if the 
+            sequence contains no elements.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the first element of.</param>
+            <returns>
+            default(<B>TSource</B>) if <paramref name="source"/> is empty; otherwise, the first element in <paramref name="source"/>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.FirstOrDefault``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the first element of the parallel sequence that satisfies a condition or a 
+            default value if no such element is found.
+            </summary>
+            <remarks>There's a temporary difference from LINQ to Objects, this does not throw
+            ArgumentNullException when the predicate is null.</remarks>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return an element from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            default(<B>TSource</B>) if <paramref name="source"/> is empty or if no element passes the test 
+            specified by <B>predicate</B>; otherwise, the first element in <paramref name="source"/> that 
+            passes the test specified by <B>predicate</B>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Last``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the last element of a parallel sequence.</summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the last element from.</param>
+            <returns>The value at the last position in the source sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            <paramref name="source"/> contains no elements.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Last``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the last element of a parallel sequence that satisfies a specified condition.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return an element from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            The last element in the sequence that passes the test in the specified predicate function.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            No element in <paramref name="source"/> satisfies the condition in <paramref name="predicate"/>.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.LastOrDefault``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the last element of a parallel sequence, or a default value if the 
+            sequence contains no elements.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return an element from.</param>
+            <returns>
+            default(<typeparamref name="TSource"/>) if the source sequence is empty; otherwise, the last element in the sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.LastOrDefault``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the last element of a parallel sequence that satisfies a condition, or 
+            a default value if no such element is found.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return an element from.</param>
+            <param name="predicate">A function to test each element for a condition.</param>
+            <returns>
+            default(<typeparamref name="TSource"/>) if the sequence is empty or if no elements pass the test in the 
+            predicate function; otherwise, the last element that passes the test in the predicate function.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Single``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the only element of a parallel sequence, and throws an exception if there is not 
+            exactly one element in the sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the single element of.</param>
+            <returns>The single element of the input sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            The input sequence contains more than one element. -or- The input sequence is empty.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.Single``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the only element of a parallel sequence that satisfies a specified condition, 
+            and throws an exception if more than one such element exists.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the single element of.</param>
+            <param name="predicate">A function to test an element for a condition.</param>
+            <returns>The single element of the input sequence that satisfies a condition.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.InvalidOperationException">
+            No element satisfies the condition in <paramref name="predicate"/>. -or- More than one element satisfies the condition in <paramref name="predicate"/>.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SingleOrDefault``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the only element of a parallel sequence, or a default value if the sequence is 
+            empty; this method throws an exception if there is more than one element in the sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the single element of.</param>
+            <returns>
+            The single element of the input sequence, or default(<typeparamref name="TSource"/>) if the 
+            sequence contains no elements.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.SingleOrDefault``1(System.Linq.ParallelQuery{``0},System.Func{``0,System.Boolean})">
+            <summary>
+            Returns the only element of a parallel sequence that satisfies a specified condition 
+            or a default value if no such element exists; this method throws an exception 
+            if more than one element satisfies the condition.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the single element of.</param>
+            <param name="predicate">A function to test an element for a condition.</param>
+            <returns>
+            The single element of the input sequence that satisfies the condition, or 
+            default(<typeparamref name="TSource"/>) if no such element is found.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> or <paramref name="predicate"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.DefaultIfEmpty``1(System.Linq.ParallelQuery{``0})">
+            <summary>
+            Returns the elements of the specified parallel sequence or the type parameter's 
+            default value in a singleton collection if the sequence is empty.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return a default value for if it is empty.</param>
+            <returns>
+            A sequence that contains default(<B>TSource</B>) if <paramref name="source"/> is empty; otherwise, <paramref name="source"/>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.DefaultIfEmpty``1(System.Linq.ParallelQuery{``0},``0)">
+            <summary>
+            Returns the elements of the specified parallel sequence or the specified value 
+            in a singleton collection if the sequence is empty.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">The sequence to return the specified value for if it is empty.</param>
+            <param name="defaultValue">The value to return if the sequence is empty.</param>
+            <returns>
+            A sequence that contains <B>defaultValue</B> if <paramref name="source"/> is empty; otherwise, <paramref name="source"/>.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ElementAt``1(System.Linq.ParallelQuery{``0},System.Int32)">
+            <summary>
+            Returns the element at a specified index in a parallel sequence.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence to return an element from.</param>
+            <param name="index">The zero-based index of the element to retrieve.</param>
+            <returns>The element at the specified position in the source sequence.</returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.ArgumentOutOfRangeException">
+            <paramref name="index"/> is less than 0 or greater than or equal to the number of elements in <paramref name="source"/>.
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="M:System.Linq.ParallelEnumerable.ElementAtOrDefault``1(System.Linq.ParallelQuery{``0},System.Int32)">
+            <summary>
+            Returns the element at a specified index in a parallel sequence or a default value if the 
+            index is out of range.
+            </summary>
+            <typeparam name="TSource">The type of the elements of <paramref name="source"/>.</typeparam>
+            <param name="source">A sequence to return an element from.</param>
+            <param name="index">The zero-based index of the element to retrieve.</param>
+            <returns>
+            default(<B>TSource</B>) if the index is outside the bounds of the source sequence; 
+            otherwise, the element at the specified position in the source sequence.
+            </returns>
+            <exception cref="T:System.ArgumentNullException">
+            <paramref name="source"/> is a null reference (Nothing in Visual Basic).
+            </exception>
+            <exception cref="T:System.AggregateException">
+            One or more exceptions occurred during the evaluation of the query.
+            </exception>
+            <exception cref="T:System.OperationCanceledException">
+            The query was canceled.
+            </exception>
+        </member>
+        <member name="T:System.Linq.ParallelMergeOptions">
+            <summary>
+            Specifies the preferred type of output merge to use in a query. This is a hint only, and may not be
+            respected by the system when parallelizing all queries.
+            </summary>
+            <remarks>
+            <para>
+            Use <b>NotBuffered</b> for queries that will be consumed and output as streams, this has the lowest latency
+            between beginning query execution and elements being yielded. For some queries, such as those involving a 
+            sort (OrderBy, OrderByDescending), buffering is essential and a hint of NotBuffered or AutoBuffered will 
+            be ignored.
+            </para>
+            <para>
+            Use <b>AutoBuffered</b> for most cases; this is the default.  It strikes a balance between latency and
+            overall performance.
+            </para>
+            <para>
+            Use <b>FullyBuffered</b> for queries when the entire output can be processed before the information is 
+            needed. This option offers the best performance when all of the output can be accumulated before yielding
+            any information, though it is not suitable for stream processing or showing partial results mid-query.
+            </para>
+            </remarks>
+        </member>
+        <member name="F:System.Linq.ParallelMergeOptions.Default">
+            <summary>
+            Use the default merge type, which is AutoBuffered.
+            </summary>
+        </member>
+        <member name="F:System.Linq.ParallelMergeOptions.NotBuffered">
+            <summary>
+            Use a merge without output buffers. As soon as result elements have been computed, 
+            make that element available to the consumer of the query.
+            </summary>
+        </member>
+        <member name="F:System.Linq.ParallelMergeOptions.AutoBuffered">
+            <summary>
+            Use a merge with output buffers of a size chosen by the system. Results
+            will accumulate into an output buffer before they are available to the consumer of
+            the query.
+            </summary>
+        </member>
+        <member name="F:System.Linq.ParallelMergeOptions.FullyBuffered">
+            <summary>
+            Use a merge with full output buffers. The system will accumulate all of the
+            results before making any of them available to the consumer of the query.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.AsynchronousChannel`1">
+            <summary>
+            This is a bounded channel meant for single-producer/single-consumer scenarios. 
+            </summary>
+            <typeparam name="T">Specifies the type of data in the channel.</typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.SynchronousChannel`1">
+             <summary>
+             The simplest channel is one that has no synchronization.  This is used for stop-
+             and-go productions where we are guaranteed the consumer is not running
+             concurrently. It just wraps a FIFO queue internally.
+            
+             Assumptions:
+                 Producers and consumers never try to enqueue/dequeue concurrently.
+             </summary>
+             <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.EmptyEnumerable`1">
+            <summary>
+            We occassionally need a no-op enumerator to stand-in when we don't have data left
+            within a partition's data stream. These are simple enumerable and enumerator
+            implementations that always and consistently yield no elements.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.ParallelQuery`1">
+            <summary>
+            Represents a parallel sequence.
+            </summary>
+        </member>
+        <member name="T:System.Linq.ParallelQuery">
+            <summary>
+            Represents a parallel sequence.
+            </summary>
+        </member>
+        <member name="M:System.Linq.ParallelQuery.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the sequence.
+            </summary>
+            <returns>An enumerator that iterates through the sequence.</returns>
+        </member>
+        <member name="M:System.Linq.ParallelQuery`1.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the sequence.
+            </summary>
+            <returns>An enumerator that iterates through the sequence.</returns>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryOperatorEnumerator`2">
+            <summary>
+            A common enumerator type that unifies all query operator enumerators. 
+            </summary>
+            <typeparam name="TElement"></typeparam>
+            <typeparam name="TKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.EnumerableWrapperWeakToStrong">
+            <summary>
+            A simple implementation of the IEnumerable{object} interface which wraps
+            a weakly typed IEnumerable object, allowing it to be accessed as a strongly typed
+            IEnumerable{object}.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.IParallelPartitionable`1">
+             <summary>
+             
+             An interface that allows developers to specify their own partitioning routines.
+            
+             </summary>
+             <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ParallelEnumerableWrapper">
+            <summary>
+            A simple implementation of the ParallelQuery{object} interface which wraps an
+            underlying IEnumerable, such that it can be used in parallel queries.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.ParallelEnumerableWrapper`1">
+            <summary>
+            A simple implementation of the ParallelQuery{T} interface which wraps an
+            underlying IEnumerable{T}, such that it can be used in parallel queries.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryAggregationOptions">
+            <summary>
+            An enum to specify whether an aggregate operator is associative, commutative,
+            neither, or both. This influences query analysis and execution: associative
+            aggregations can run in parallel, whereas non-associative cannot; non-commutative
+            aggregations must be run over data in input-order. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.RangeEnumerable">
+            <summary>
+            A simple enumerable type that implements the range algorithm. It also supports
+            partitioning of the indices by implementing an interface that PLINQ recognizes.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.RepeatEnumerable`1">
+            <summary>
+            A simple enumerable type that implements the repeat algorithm. It also supports
+            partitioning of the count space by implementing an interface that PLINQ recognizes.
+            </summary>
+            <typeparam name="TResult"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ArrayMergeHelper`1">
+            <summary>
+            A special merge helper for indexible queries. Given an indexible query, we know how many elements
+            we'll have in the result set, so we can allocate the array ahead of time. Then, as each result element
+            is produced, we can directly insert it into the appropriate position in the output array, paying
+            no extra cost for ordering.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.IMergeHelper`1">
+            <summary>
+            Used as a stand-in for replaceable merge algorithms. Alternative implementations
+            are chosen based on the style of merge required. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.ArrayMergeHelper`1.#ctor(System.Linq.Parallel.QuerySettings,System.Linq.Parallel.QueryResults{`0})">
+            <summary>
+            Instantiates the array merge helper.
+            </summary>
+            <param name="settings">The query settings</param>
+            <param name="queryResults">The query results</param>
+        </member>
+        <member name="M:System.Linq.Parallel.ArrayMergeHelper`1.ToArrayElement(System.Int32)">
+            <summary>
+            A method used as a delegate passed into the ForAll operator
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ArrayMergeHelper`1.Execute">
+            <summary>
+            Schedules execution of the merge itself.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ArrayMergeHelper`1.GetEnumerator">
+            <summary>
+            Gets the enumerator over the results.
+            
+            We never expect this method to be called. ArrayMergeHelper is intended to be used when we want
+            to consume the results using GetResultsAsArray().
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ArrayMergeHelper`1.GetResultsAsArray">
+            <summary>
+            Returns the merged results as an array.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="T:System.Linq.Parallel.AsynchronousChannelMergeEnumerator`1">
+             <summary>
+             An enumerator that merges multiple one-to-one channels into a single output
+             stream, including any necessary blocking and synchronization. This is an
+             asynchronous enumerator, i.e. the producers may be inserting items into the
+             channels concurrently with the consumer taking items out of them. Therefore,
+             enumerating this object can cause the current thread to block.
+            
+             We use a biased choice algorithm to choose from our consumer channels. I.e. we
+             will prefer to process elements in a fair round-robin fashion, but will
+             occassionally bypass this if a channel is empty.
+            
+             </summary>
+             <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.MergeEnumerator`1">
+            <summary>
+            Convenience class used by enumerators that merge many partitions into one. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.AsynchronousChannelMergeEnumerator`1.WaitAny(System.Threading.ManualResetEventSlim[])">
+            <summary>
+            WaitAny simulates a Win32-style WaitAny on the set of thin-events.
+            </summary>
+            <param name="events">An array of thin-events (null elements permitted)</param>
+            <returns>The index of the specific event in events that caused us to wake up.</returns>
+        </member>
+        <member name="T:System.Linq.Parallel.DefaultMergeHelper`2">
+            <summary>
+            The default merge helper uses a set of straightforward algorithms for output
+            merging. Namely, for synchronous merges, the input data is yielded from the
+            input data streams in "depth first" left-to-right order. For asynchronous merges,
+            on the other hand, we use a biased choice algorithm to favor input channels in
+            a "fair" way. No order preservation is carried out by this helper. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TIgnoreKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.MergeExecutor`1">
+            <summary>
+            Drives execution of an actual merge operation, including creating channel data
+            structures and scheduling parallel work as appropriate. The algorithms used
+            internally are parameterized based on the type of data in the partitions; e.g.
+            if an order preserved stream is found, the merge will automatically use an
+            order preserving merge, and so forth. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingMergeHelper`2">
+            <summary>
+            The order preserving merge helper guarantees the output stream is in a specific order. This is done
+            by comparing keys from a set of already-sorted input partitions, and coalescing output data using
+            incremental key comparisons.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1">
+            <summary>
+            A merge helper that yields results in a streaming fashion, while still ensuring correct output
+            ordering. This merge only works if each producer task generates outputs in the correct order,
+            i.e. with an Increasing (or Correct) order index.
+            
+            The merge creates DOP producer tasks, each of which will be  writing results into a separate
+            buffer.
+            
+            The consumer always waits until each producer buffer contains at least one element. If we don't
+            have one element from each producer, we cannot yield the next element. (If the order index is 
+            Correct, or in some special cases with the Increasing order, we could yield sooner. The
+            current algorithm does not take advantage of this.)
+            
+            The consumer maintains a producer heap, and uses it to decide which producer should yield the next output
+            result. After yielding an element from a particular producer, the consumer will take another element
+            from the same producer. However, if the producer buffer exceeded a particular threshold, the consumer
+            will take the entire buffer, and give the producer an empty buffer to fill.
+            
+            Finally, if the producer notices that its buffer has exceeded an even greater threshold, it will
+            go to sleep and wait until the consumer takes the entire buffer.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.INITIAL_BUFFER_SIZE">
+            <summary>
+            The initial capacity of the buffer queue. The value was chosen experimentally.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.STEAL_BUFFER_SIZE">
+            <summary>
+            If the consumer notices that the queue reached this limit, it will take the entire buffer from
+            the producer, instead of just popping off one result. The value was chosen experimentally.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.MAX_BUFFER_SIZE">
+            <summary>
+            If the producer notices that the queue reached this limit, it will go to sleep until woken up
+            by the consumer. Chosen experimentally.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_autoBuffered">
+            <summary>
+            Whether the producer is allowed to buffer up elements before handing a chunk to the consumer.
+            If false, the producer will make each result available to the consumer immediately after it is
+            produced.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_buffers">
+            <summary>
+            Buffers for the results. Each buffer has elements added by one producer, and removed
+            by the consumer.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_producerDone">
+            <summary>
+            Whether each producer is done producing. Set to true by individual producers, read by consumer.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_producerWaiting">
+            <summary>
+            Whether a particular producer is waiting on the consumer. Read by the consumer, set to true
+            by producers, set to false by the consumer.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_consumerWaiting">
+            <summary>
+             Whether the consumer is waiting on a particular producer. Read by producers, set to true
+             by consumer, set to false by producer.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.m_bufferLocks">
+            <summary>
+            Each object is a lock protecting the corresponding elements in m_buffers, m_producerDone, 
+            m_producerWaiting and m_consumerWaiting.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.s_producerComparer">
+            <summary>
+            A singleton instance of the comparer used by the producer heap. Eager allocation is OK 
+            because if the static constructor runs, we will be using this merge.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.Producer">
+            <summary>
+            A structure to represent a producer in the producer heap.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.ProducerComparer">
+            <summary>
+            A comparer used by FixedMaxHeap(Of Producer)
+            
+            This comparer will be used by max-heap. We want the producer with the smallest MaxKey to
+            end up in the root of the heap.
+            
+                x.MaxKey GREATER_THAN y.MaxKey  =>  x LESS_THAN y     => return -
+                x.MaxKey EQUALS y.MaxKey        =>  x EQUALS y        => return 0
+                x.MaxKey LESS_THAN y.MaxKey     =>  x GREATER_THAN y  => return +
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator">
+            <summary>
+            Enumerator over the results of an order-preserving pipelining merge.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.m_mergeHelper">
+            <summary>
+            Merge helper associated with this enumerator
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.m_producerHeap">
+            <summary>
+            Heap used to efficiently locate the producer whose result should be consumed next.
+            For each producer, stores the order index for the next element to be yielded.
+            
+            Read and written by the consumer only.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.m_producerNextElement">
+            <summary>
+            Stores the next element to be yielded from each producer. We use a separate array
+            rather than storing this information in the producer heap to keep the Producer struct 
+            small.
+            
+            Read and written by the consumer only.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.m_privateBuffer">
+            <summary>
+            A private buffer for the consumer. When the size of a producer buffer exceeds a threshold 
+            (STEAL_BUFFER_SIZE), the consumer will take ownership of the entire buffer, and give the
+            producer a new empty buffer to place results into.
+            
+            Read and written by the consumer only.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.m_initialized">
+            <summary>
+            Tracks whether MoveNext() has already been called previously.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.#ctor(System.Linq.Parallel.OrderPreservingPipeliningMergeHelper{`0})">
+            <summary>
+            Constructor
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.MoveNext">
+            <summary>
+            Moves the enumerator to the next result, or returns false if there are no more results to yield.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.ThrowIfInTearDown">
+            <summary>
+            If the cancellation of the query has been initiated (because one or more producers
+            encountered exceptions, or because external cancellation token has been set), the method 
+            will tear down the query and rethrow the exception.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.TryWaitForElement(System.Int32,System.Linq.Parallel.Pair{System.Int32,`0}@)">
+            <summary>
+            Wait until a producer's buffer is non-empty, or until that producer is done.
+            </summary>
+            <returns>false if there is no element to yield because the producer is done, true otherwise</returns>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.TryGetPrivateElement(System.Int32,System.Linq.Parallel.Pair{System.Int32,`0}@)">
+            <summary>
+            Looks for an element from a particular producer in the consumer's private buffer.
+            </summary>
+        </member>
+        <member name="P:System.Linq.Parallel.OrderPreservingPipeliningMergeHelper`1.OrderedPipeliningMergeEnumerator.Current">
+            <summary>
+            Returns the current result
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.SynchronousChannelMergeEnumerator`1">
+            <summary>
+            This enumerator merges multiple input channels into a single output stream. The merging process just
+            goes from left-to-right, enumerating each channel in succession in its entirety.
+            Assumptions:
+                Before enumerating this object, all producers for all channels must have finished enqueueing new
+                elements.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.HashRepartitionEnumerator`3">
+            <summary>
+            This enumerator handles the actual coordination among partitions required to
+            accomplish the repartitioning operation, as explained above.
+            </summary>
+            <typeparam name="TInputOutput">The kind of elements.</typeparam>
+            <typeparam name="THashKey">The key used to distribute elements.</typeparam>
+            <typeparam name="TIgnoreKey">The kind of keys found in the source (ignored).</typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.HashRepartitionStream`3">
+             <summary>
+             A repartitioning stream must take input data that has already been partitioned and
+             redistribute its contents based on a new partitioning algorithm. This is accomplished
+             by making each partition p responsible for redistributing its input data to the
+             correct destination partition. Some input elements may remain in p, but many will now
+             belong to a different partition and will need to move. This requires a great deal of
+             synchronization, but allows threads to repartition data incrementally and in parallel.
+             Each partition will "pull" data on-demand instead of partitions "pushing" data, which
+             allows us to reduce some amount of synchronization overhead.
+            
+             We currently only offer one form of reparitioning via hashing.  This used to be an
+             abstract base class, but we have eliminated that to get rid of some virtual calls on
+             hot code paths.  Uses a key selection algorithm with mod'ding to determine destination.
+            
+             @TODO: @BUG#519: consider adding a bound to the buffers. Unfortunately this can quite easily
+                 lead to deadlock when multiple repartitions are involved. Need a solution.
+             @TODO: @BUG#504: consider amortizing synchronization overhead by enqueueing/dequeueing in chunks
+                 rather than single elements. Also need to be careful not to introduce deadlock.
+             </summary>
+             <typeparam name="TInputOutput"></typeparam>
+             <typeparam name="THashKey"></typeparam>
+             <typeparam name="TOrderKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionedStream`2">
+             <summary>
+             A partitioned stream just partitions some data source using an extensible 
+             partitioning algorithm and exposes a set of N enumerators that are consumed by
+             their ordinal index [0..N). It is used to build up a set of streaming computations.
+             At instantiation time, the actual data source to be partitioned is supplied; and
+             then the caller will layer on top additional enumerators to represent phases in the
+             computation. Eventually, a merge can then schedule enumeration of all of the
+             individual partitions in parallel by obtaining references to the individual
+             partition streams.
+            
+             This type has a set of subclasses which implement different partitioning algorithms,
+             allowing us to easily plug in different partitioning techniques as needed. The type
+             supports wrapping IEnumerables and IEnumerators alike, with some preference for the
+             former as many partitioning algorithms are more intelligent for certain data types.
+             </summary>
+             <typeparam name="TElement"></typeparam>
+             <typeparam name="TKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.IPartitionedStreamRecipient`1">
+            <summary>
+            IPartitionedStreamRecipient is essentially a generic action on a partitioned stream,
+            whose generic type parameter is the type of the order keys in the partitioned stream.
+            </summary>
+            <typeparam name="TElement"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderedHashRepartitionEnumerator`3">
+            <summary>
+            This enumerator handles the actual coordination among partitions required to
+            accomplish the repartitioning operation, as explained above.  In addition to that,
+            it tracks order keys so that order preservation can flow through the enumerator.
+            </summary>
+            <typeparam name="TInputOutput">The kind of elements.</typeparam>
+            <typeparam name="THashKey">The key used to distribute elements.</typeparam>
+            <typeparam name="TOrderKey">The kind of keys found in the source.</typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionedDataSource`1">
+             <summary>
+             Contiguous range chunk partitioning attempts to improve data locality by keeping
+             data close together in the incoming data stream together in the outgoing partitions.
+             There are really three types of partitions that are used internally:
+            
+                 1. If the data source is indexable--like an array or List_T--we can actually
+                    just compute the range indexes and avoid doing any copying whatsoever. Each
+                    "partition" is just an enumerator that will walk some subset of the data.
+                 2. If the data source has an index (different than being indexable!), we can
+                    turn this into a range scan of the index. We can roughly estimate distribution
+                    and ensure an evenly balanced set of partitions.
+                    @TODO: @BUG#516: we don't have indexes today. We are considering it for the future.
+                 3. If we can't use 1 or 2, we instead partition "on demand" by chunking the contents
+                    of the source enumerator as they are requested. The unfortunate thing is that
+                    this requires synchronization, since consumers may be running in parallel. We
+                    amortize the cost of this by giving chunks of items when requested instead of
+                    one element at a time. Note that this approach also works for infinite streams.
+            
+             In all cases, the caller can request that enumerators walk elements in striped
+             contiguous chunks. If striping is requested, then each partition j will yield elements
+             in the data source for which ((i / s)%p) == j, where i is the element's index, s is
+             a chunk size calculated by the system with the intent of aligning on cache lines, and
+             p is the number of partitions. If striping is not requested, we use the same algorith,
+             only, instead of aligning on cache lines, we use a chunk size of l / p, where l
+             is the length of the input and p is the number of partitions.
+            
+             Notes:
+                 This is used as the default partitioning strategy by much of the PLINQ infrastructure.
+             </summary>
+             <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.AssociativeAggregationOperator`3">
+             <summary>
+             The aggregation operator is a little unique, in that the enumerators it returns
+             yield intermediate results instead of the final results. That's because there is
+             one last Aggregate operation that must occur in order to perform the final reduction
+             over the intermediate streams. In other words, the intermediate enumerators produced
+             by this operator are never seen by other query operators or consumers directly.
+            
+             An aggregation performs parallel prefixing internally. Given a binary operator O,
+             it will generate intermediate results by folding O across partitions; then it
+             performs a final reduction by folding O accross the intermediate results. The
+             analysis engine knows about associativity and commutativity, and will ensure the
+             style of partitioning inserted into the tree is compatable with the operator.
+            
+             For instance, say O is + (meaning it is AC), our input is {1,2,...,8}, and we
+             use 4 partitions to calculate the aggregation. Sequentially this would look
+             like this O(O(O(1,2),...),8), in other words ((1+2)+...)+8. The parallel prefix
+             of this (w/ 4 partitions) instead calculates the intermediate aggregations, i.e.:
+             t1 = O(1,2), t2 = O(3,4), ... t4 = O(7,8), aka t1 = 1+2, t2 = 3+4, t4 = 7+8.
+             The final step is to aggregate O over these intermediaries, i.e.
+             O(O(O(t1,t2),t3),t4), or ((t1+t2)+t3)+t4. This generalizes to any binary operator.
+            
+             Beause some aggregations use a different input, intermediate, and output types,
+             we support an even more generalized aggregation type. In this model, we have
+             three operators, an intermediate (used for the incremental aggregations), a
+             final (used for the final summary of intermediate results), and a result selector
+             (used to perform whatever transformation is needed on the final summary).
+             </summary>
+             <typeparam name="TInput"></typeparam>
+             <typeparam name="TIntermediate"></typeparam>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.UnaryQueryOperator`2">
+            <summary>
+            The base class from which all binary query operators derive, that is, those that
+            have two child operators. This introduces some convenience methods for those
+            classes, as well as any state common to all subclasses.
+            </summary>
+            <typeparam name="TInput"></typeparam>
+            <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryOperator`1">
+             <summary>
+             This is the abstract base class for all query operators in the system. It
+             implements the ParallelQuery{T} type so that it can be bound as the source
+             of parallel queries and so that it can be returned as the result of parallel query
+             operations. Not much is in here, although it does serve as the "entry point" for
+             opening all query operators: it will lazily analyze and cache a plan the first
+             time the tree is opened, and will open the tree upon calls to GetEnumerator.
+            
+             Notes:
+                 This class implements ParallelQuery so that any parallel query operator
+                 can bind to the parallel query provider overloads. This allows us to string
+                 together operators w/out the user always specifying AsParallel, e.g.
+                 Select(Where(..., ...), ...), and so forth. 
+             </summary>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryResults`1">
+             <summary>
+             The QueryResults{T} is a class representing the results of the query. There may
+             be different ways the query results can be manipulated. Currently, two ways are
+             supported:
+            
+             1. Open the query results as a partitioned stream by calling GivePartitionedStream
+                and pass a generic action as an argument.
+                
+             2. Access individual elements of the results list by calling GetElement(index) and
+                ElementsCount. This method of accessing the query results is available only if
+                IsIndexible return true. 
+             </summary>
+             <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionerQueryOperator`1">
+            <summary>
+            A QueryOperator that represents the output of the query partitioner.AsParallel().
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.PartitionerQueryOperator`1.GetOrdinalIndexState(System.Collections.Concurrent.Partitioner{`0})">
+            <summary>
+            Determines the OrdinalIndexState for a partitioner 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionerQueryOperator`1.PartitionerQueryOperatorResults">
+            <summary>
+            QueryResults for a PartitionerQueryOperator
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionerQueryOperator`1.OrderablePartitionerEnumerator">
+            <summary>
+            Enumerator that converts an enumerator over key-value pairs exposed by a partitioner
+            to a QueryOperatorEnumerator used by PLINQ internally.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionerQueryOperator`1.PartitionerEnumerator">
+            <summary>
+            Enumerator that converts an enumerator over key-value pairs exposed by a partitioner
+            to a QueryOperatorEnumerator used by PLINQ internally.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.ScanQueryOperator`1">
+            <summary>
+            A scan is just a simple operator that is positioned directly on top of some
+            real data source. It's really just a place holder used during execution and
+            analysis -- it should never actually get opened.
+            </summary>
+            <typeparam name="TElement"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ExceptQueryOperator`1">
+            <summary>
+            Operator that yields the elements from the first data source that aren't in the second.
+            This is known as the set relative complement, i.e. left - right. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.BinaryQueryOperator`3">
+            <summary>
+            The base class from which all binary query operators derive, that is, those that
+            have two child operators. This introduces some convenience methods for those
+            classes, as well as any state common to all subclasses. 
+            </summary>
+            <typeparam name="TLeftInput"></typeparam>
+            <typeparam name="TRightInput"></typeparam>
+            <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.GroupJoinQueryOperator`4">
+            <summary>
+            A group join operator takes a left query tree and a right query tree, and then yields
+            the matching elements between the two. This can be used for outer joins, i.e. those
+            where an outer element has no matching inner elements -- the result is just an empty
+            list. As with the join algorithm above, we currently use a hash join algorithm.
+            </summary>
+            <typeparam name="TLeftInput"></typeparam>
+            <typeparam name="TRightInput"></typeparam>
+            <typeparam name="TKey"></typeparam>
+            <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.HashJoinQueryOperatorEnumerator`5">
+             <summary>
+             This enumerator implements the hash-join algorithm as noted earlier.
+            
+             Assumptions:
+                 This enumerator type won't work properly at all if the analysis engine didn't
+                 ensure a proper hash-partition. We expect inner and outer elements with equal
+                 keys are ALWAYS in the same partition. If they aren't (e.g. if the analysis is
+                 busted) we'll silently drop items on the floor. :( 
+                 
+                 
+              This is the enumerator class for two operators:
+               - Join
+               - GroupJoin
+             </summary>
+             <typeparam name="TLeftInput"></typeparam>
+             <typeparam name="TLeftKey"></typeparam>
+             <typeparam name="TRightInput"></typeparam>
+             <typeparam name="THashKey"></typeparam>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.IntersectQueryOperator`1">
+            <summary>
+            Operator that yields the intersection of two data sources. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.JoinQueryOperator`4">
+             <summary>
+             A join operator takes a left query tree and a right query tree, and then yields the
+             matching pairs between the two. LINQ supports equi-key-based joins. Hence, a key-
+             selection function for the left and right data types will yield keys of the same
+             type for both. We then merely have to match elements from the left with elements from
+             the right that have the same exact key. Note that this is an inner join. In other
+             words, outer elements with no matching inner elements do not appear in the output.
+            
+             @TODO: @BUG#528: Currently we implement only a hash-join algorithm. Furthermore, we always
+                 choose the inner data source for the hash-table creation. There is room for
+                 optimization and different algorithm choices eventually.
+            
+             Hash-joins work in two phases:
+            
+                (1) Building - we build a hash-table from one of the data sources. In the case
+                        of this specific operator, the table is built from the hash-codes of
+                        keys selected via the key selector function. Because elements may share
+                        the same key, the table must support one-key-to-many-values.
+                (2) Probing - for each element in the data source not used for building, we
+                        use its key to look into the hash-table. If we find elements under this
+                        key, we just enumerate all of them, yielding them as join matches.
+            
+             Because hash-tables exhibit on average O(1) lookup, we turn what would have been
+             an O(n*m) algorithm -- in the case of nested loops joins -- into an O(n) algorithm.
+             We of course require some additional storage to do so, but in general this pays.
+             </summary>
+             <typeparam name="TLeftInput"></typeparam>
+             <typeparam name="TRightInput"></typeparam>
+             <typeparam name="TKey"></typeparam>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.UnionQueryOperator`1">
+            <summary>
+            Operator that yields the union of two data sources. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ZipQueryOperator`3">
+            <summary>
+            A Zip operator combines two input data sources into a single output stream,
+            using a pairwise element matching algorithm. For example, the result of zipping
+            two vectors a = {0, 1, 2, 3} and b = {9, 8, 7, 6} is the vector of pairs,
+            c = {(0,9), (1,8), (2,7), (3,6)}. Because the expectation is that each element
+            is matched with the element in the other data source at the same ordinal
+            position, the zip operator requires order preservation. 
+            </summary>
+            <typeparam name="TLeftInput"></typeparam>
+            <typeparam name="TRightInput"></typeparam>
+            <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PartitionedStreamMerger`1">
+            <summary>
+            Partitioned stream recipient that will merge the results. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryOpeningEnumerator`1">
+            <summary>
+            A wrapper enumerator that just opens the query operator when MoveNext() is called for the
+            first time. We use QueryOpeningEnumerator to call QueryOperator.GetOpenedEnumerator()
+            lazily because once GetOpenedEnumerator() is called, PLINQ starts precomputing the
+            results of the query.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.QueryOpeningEnumerator`1.OpenQuery">
+            <summary>
+            Opens the query and initializes m_openedQueryEnumerator and m_querySettings.
+            Called from the first MoveNext call.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.CountAggregationOperator`1">
+            <summary>
+            An inlined count aggregation and its enumerator. 
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.InlinedAggregationOperator`3">
+            <summary>
+            This class is common to all of the "inlined" versions of various aggregations.  The
+            inlined operators ensure that real MSIL instructions are used to perform elementary
+            operations versus general purpose delegate-based binary operators.  For obvious reasons
+            this is a quite bit more efficient, although it does lead to a fair bit of unfortunate
+            code duplication. 
+            </summary>
+            <typeparam name="TSource"></typeparam>
+            <typeparam name="TIntermediate"></typeparam>
+            <typeparam name="TResult"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.InlinedAggregationOperatorEnumerator`1">
+            <summary>
+            A class with some shared implementation between all aggregation enumerators. 
+            </summary>
+            <typeparam name="TIntermediate"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.DecimalAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for decimals. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.DecimalMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for decimals.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.DecimalSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for decimals. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.DoubleAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for doubles.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.DoubleMinMaxAggregationOperator">
+             <summary>
+             An inlined min/max aggregation and its enumerator, for doubles.
+            
+             Notes:
+                 Note that normally double.NaN &lt; anything is false, as is anything &lt; NaN.  This would
+                 lead to some strangeness in Min and Max, e.g. Min({ NaN, 5.0 } == NaN, yet
+                 Min({ 5.0, NaN }) == 5.0!  We impose a total ordering so that NaN is smaller than
+                 everything, including -infinity, which is consistent with Comparer_T. 
+             </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.DoubleSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for doubles. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.FloatAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for floats. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.FloatMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for floats.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.FloatSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for floats. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.IntAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for ints. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.IntMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for ints. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.IntSumAggregationOperator">
+            <summary>
+            Inlined aggregations for summing up primitives (int, long, float, double, decimal), as
+            well as the nullable versions of each (int?, long?, float?, double?, decimal?). 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.LongAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for longs. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.LongCountAggregationOperator`1">
+            <summary>
+            An inlined count aggregation and its enumerator. 
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.LongMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for longs. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.LongSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for longs. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDecimalAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for Nullable decimals.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDecimalMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for Nullable decimals. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDecimalSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for nullable decimals. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDoubleAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for Nullable doubles.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDoubleMinMaxAggregationOperator">
+             <summary>
+             An inlined min/max aggregation and its enumerator, for Nullable{Double}s.
+            
+             Notes:
+                 Note that normally double.NaN &lt; anything is false, as is anything &lt; NaN.  This would
+                 lead to some strangeness in Min and Max, e.g. Min({ NaN, 5.0 } == NaN, yet
+                 Min({ 5.0, NaN }) == 5.0!  We impose a total ordering so that NaN is smaller than
+                 everything, including -infinity, which is consistent with Comparer_T. 
+             </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableDoubleSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for nullable doubles. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableFloatAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for Nullable floats.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableFloatMinMaxAggregationOperator">
+             <summary>
+             An inlined min/max aggregation and its enumerator, for Nullable floats.
+            
+             Notes:
+                 Note that normally float.NaN &lt; anything is false, as is anything &lt; NaN.  This would
+                 lead to some strangeness in Min and Max, e.g. Min({ NaN, 5.0 } == NaN, yet
+                 Min({ 5.0, NaN }) == 5.0!  We impose a total ordering so that NaN is smaller than
+                 everything, including -infinity, which is consistent with Comparer_T.
+             </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableFloatSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for Nullable floats. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableIntAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for Nullable ints. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableIntMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for Nullable ints. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableIntSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for Nullable ints. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableLongAverageAggregationOperator">
+            <summary>
+            An inlined average aggregation operator and its enumerator, for Nullable longs. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableLongMinMaxAggregationOperator">
+            <summary>
+            An inlined min/max aggregation and its enumerator, for Nullable{Int64}s. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NullableLongSumAggregationOperator">
+            <summary>
+            An inlined sum aggregation and its enumerator, for Nullable longs. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.ListQueryResults`1">
+            <summary>
+            Class to represent an IList{T} as QueryResults{T} 
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.OrdinalIndexState">
+            <summary>
+            Describes the state of order preservation index associated with an enumerator. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.QuerySettings">
+            <summary>
+            This type contains query execution options specified by the user.
+            QuerySettings are used as follows:
+            - in the query construction phase, some settings may be uninitialized.
+            - at the start of the query opening phase, the WithDefaults method
+              is used to initialize all uninitialized settings.
+            - in the rest of the query opening phase, we assume that all settings
+              have been initialized.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderingQueryOperator`1">
+            <summary>
+            Represents operators AsOrdered and AsUnordered. In the current implementation, it
+            simply turns on preservation globally in the query. 
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryExecutionOption`1">
+            <summary>
+            Represents operators that set various query execution options. 
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.AnyAllSearchOperator`1">
+             <summary>
+             The any/all operators work the same way. They search for the occurrence of a predicate
+             value in the data source, and upon the first occurrence of such a value, yield a
+             particular value. Specifically:
+            
+                 - Any returns true if the predicate for any element evaluates to true.
+                 - All returns false if the predicate for any element evaluates to false.
+            
+             This uniformity is used to apply a general purpose algorithm. Both sentences above
+             take the form of "returns XXX if the predicate for any element evaluates to XXX."
+             Therefore, we just parameterize on XXX, called the qualifciation below, and if we
+             ever find an occurrence of XXX in the input data source, we also return XXX. Otherwise,
+             we return !XXX. Obviously, XXX in this case is a bool.
+            
+             This is a search algorithm. So once any single partition finds an element, it will
+             return so that execution can stop. This is done with a "cancelation" flag that is
+             polled by all parallel workers. The first worker to find an answer sets it, and all
+             other workers notice it and quit as quickly as possible.
+             </summary>
+             <typeparam name="TInput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ConcatQueryOperator`1">
+            <summary>
+            Concatenates one data source with another.  Order preservation is used to ensure
+            the output is actually a concatenation -- i.e. one after the other.  The only
+            special synchronization required is to find the largest index N in the first data
+            source so that the indices of elements in the second data source can be offset
+            by adding N+1.  This makes it appear to the order preservation infrastructure as
+            though all elements in the second came after all elements in the first, which is
+            precisely what we want.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ContainsSearchOperator`1">
+            <summary>
+            Contains is quite similar to the any/all operator above. Each partition searches a
+            subset of elements for a match, and the first one to find a match signals to the rest
+            of the partititons to stop searching.
+            </summary>
+            <typeparam name="TInput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.DefaultIfEmptyQueryOperator`1">
+            <summary>
+            This operator just exposes elements directly from the underlying data source, if
+            it's not empty, or yields a single default element if the data source is empty.
+            There is a minimal amount of synchronization at the beginning, until all partitions
+            have registered whether their stream is empty or not. Once the 0th partition knows
+            that at least one other partition is non-empty, it may proceed. Otherwise, it is
+            the 0th partition which yields the default value.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.DistinctQueryOperator`1">
+            <summary>
+            This operator yields all of the distinct elements in a single data set. It works quite
+            like the above set operations, with the obvious difference being that it only accepts
+            a single data source as input. 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ElementAtQueryOperator`1">
+            <summary>
+            ElementAt just retrieves an element at a specific index.  There is some cross-partition
+            coordination to force partitions to stop looking once a partition has found the
+            sought-after element.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.ElementAtQueryOperator`1.Aggregate(`0@,System.Boolean)">
+            <summary>
+            Executes the query, either sequentially or in parallel, depending on the query execution mode and
+            whether a premature merge was inserted by this ElementAt operator.
+            </summary>
+            <param name="result">result</param>
+            <param name="withDefaultValue">withDefaultValue</param>
+            <returns>whether an element with this index exists</returns>
+        </member>
+        <member name="T:System.Linq.Parallel.FirstQueryOperator`1">
+            <summary>
+            First tries to discover the first element in the source, optionally matching a
+            predicate.  All partitions search in parallel, publish the lowest index for a
+            candidate match, and reach a barrier.  Only the partition that "wins" the race,
+            i.e. who found the candidate with the smallest index, will yield an element.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ForAllOperator`1">
+            <summary>
+            A forall operator just enables an action to be placed at the "top" of a query tree
+            instead of yielding an enumerator that some consumer can walk. We execute the
+            query for effect instead of yielding a data result. 
+            </summary>
+            <typeparam name="TInput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.GroupByQueryOperator`3">
+            <summary>
+            The operator type for GroupBy statements. This operator groups the input based on
+            a key-selection routine, yielding one-to-many values of key-to-elements. The
+            implementation is very much like the hash join operator, in which we first build
+            a big hashtable of the input; then we just iterate over each unique key in the
+            hashtable, yielding it plus all of the elements with the same key.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+            <typeparam name="TGroupKey"></typeparam>
+            <typeparam name="TElement"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderedGroupByGrouping`3">
+            <summary>
+            An ordered version of the grouping data structure. Represents an ordered group of elements that
+            have the same grouping key.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderedGroupByGrouping`3.#ctor(`0,System.Collections.Generic.IComparer{`1})">
+            <summary>
+            Constructs a new grouping
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderedGroupByGrouping`3.Add(`2,`1)">
+            <summary>
+            Add an element
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderedGroupByGrouping`3.DoneAdding">
+            <summary>
+            No more elements will be added, so we can sort the group now.
+            </summary>
+        </member>
+        <member name="P:System.Linq.Parallel.OrderedGroupByGrouping`3.System#Linq#IGrouping{TGroupKey@TElement}#Key">
+            <summary>
+            The key this grouping represents.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.IndexedSelectQueryOperator`2">
+             <summary>
+             A variant of the Select operator that supplies element index while performing the
+             projection operation. This requires cooperation with partitioning and merging to
+             guarantee ordering is preserved.
+            
+             @TODO: @PERF: @BUG#527: as an optimization, we strictly don't need order to be preserved
+                  all the way until the merge. If ordering is only kept for THIS operator, we
+                  can subsequently get rid of order preservation after executing. 
+             </summary>
+             <typeparam name="TInput"></typeparam>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.IndexedWhereQueryOperator`1">
+             <summary>
+             A variant of the Where operator that supplies element index while performing the
+             filtering operation. This requires cooperation with partitioning and merging to
+             guarantee ordering is preserved.
+            
+             @TODO: @PERF: @BUG#527: as an optimization, we strictly don't need order to be preserved
+                  all the way until the merge. If ordering is only kept for THIS operator, we
+                  can subsequently get rid of order preservation after executing. 
+             </summary>
+             <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.LastQueryOperator`1">
+             <summary>
+             Last tries to discover the last element in the source, optionally matching a
+             predicate.  All partitions search in parallel, publish the greatest index for a
+             candidate match, and reach a barrier.  Only the partition that "wins" the race,
+             i.e. who found the candidate with the largest index, will yield an element.
+            
+             @TODO: @PERF: @BUG#414: this traverses the data source in forward-order.  In the future, we
+                 will want to traverse in reverse order, since this allows partitions to stop
+                 the search sooner (by watching if the current index passes below the current best).
+            
+             </summary>
+             <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ReverseQueryOperator`1">
+            <summary>
+            Reverse imposes ordinal order preservation. There are normally two phases to this
+            operator's execution.  Each partition first builds a buffer containing all of its
+            elements, and then proceeds to yielding the elements in reverse.  There is a
+            'barrier' (but not a blocking barrier) in between these two steps, at which point the largest index becomes
+            known.  This is necessary so that when elements from the buffer are yielded, the
+            CurrentIndex can be reported as the largest index minus the original index (thereby
+            reversing the indices as well as the elements themselves).  If the largest index is
+            known a priori, because we have an array for example, we can avoid the barrier in
+            between the steps.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.SelectManyQueryOperator`3">
+             <summary>
+             SelectMany is effectively a nested loops join. It is given two data sources, an
+             outer and an inner -- actually, the inner is sometimes calculated by invoking a
+             function for each outer element -- and we walk the outer, walking the entire
+             inner enumerator for each outer element. There is an optional result selector
+             function which can transform the output before yielding it as a result element.
+            
+             Notes:
+                 Although select many takes two enumerable objects as input, it appears to the
+                 query analysis infrastructure as a unary operator. That's because it works a
+                 little differently than the other binary operators: it has to re-open the right
+                 child every time an outer element is walked. The right child is NOT partitioned. 
+             </summary>
+             <typeparam name="TLeftInput"></typeparam>
+             <typeparam name="TRightInput"></typeparam>
+             <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.SelectManyQueryOperator`3.WrapPartitionedStreamNotIndexed``1(System.Linq.Parallel.PartitionedStream{`0,``0},System.Linq.Parallel.IPartitionedStreamRecipient{`2},System.Linq.Parallel.QuerySettings)">
+            <summary>
+            A helper method for WrapPartitionedStream. We use the helper to reuse a block of code twice, but with
+            a different order key type. (If premature merge occured, the order key type will be "int". Otherwise, 
+            it will be the same type as "TLeftKey" in WrapPartitionedStream.)
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.SelectManyQueryOperator`3.WrapPartitionedStreamIndexed(System.Linq.Parallel.PartitionedStream{`0,System.Int32},System.Linq.Parallel.IPartitionedStreamRecipient{`2},System.Linq.Parallel.QuerySettings)">
+            <summary>
+            Similar helper method to WrapPartitionedStreamNotIndexed, except that this one is for the indexed variant
+            of SelectMany (i.e., the SelectMany that passes indices into the user sequence-generating delegate)
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.SelectQueryOperator`2">
+            <summary>
+            The operator type for Select statements. This operator transforms elements as it
+            enumerates them through the use of a selector delegate. 
+            </summary>
+            <typeparam name="TInput"></typeparam>
+            <typeparam name="TOutput"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.SingleQueryOperator`1">
+            <summary>
+            Single searches the input to find the sole element that satisfies the (optional)
+            predicate.  If multiple such elements are found, the caller is responsible for
+            producing an error.  There is some degree of cross-partition synchronization to
+            proactively hault the search if we ever determine there are multiple elements
+            satisfying the search in the input.
+            </summary>
+            <typeparam name="TSource"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.SortQueryOperator`2">
+            <summary>
+            The query operator for OrderBy and ThenBy.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TSortKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.TakeOrSkipQueryOperator`1">
+            <summary>
+            Take and Skip either take or skip a specified number of elements, captured in the
+            count argument.  These will work a little bit like TakeWhile and SkipWhile: there
+            are two phases, (1) Search and (2) Yield.  In the search phase, our goal is to
+            find the 'count'th index from the input.  We do this in parallel by sharing a count-
+            sized array.  Each thread races to populate the array with indices in ascending
+            order.  This requires synchronization for inserts.  We use a simple heap, for decent
+            worst case performance.  After a thread has scanned ‘count’ elements, or its current
+            index is greater than or equal to the maximum index in the array (and the array is
+            fully populated), the thread can stop searching.  All threads issue a barrier before
+            moving to the Yield phase.  When the Yield phase is entered, the count-1th element
+            of the array contains: in the case of Take, the maximum index (exclusive) to be
+            returned; or in the case of Skip, the minimum index (inclusive) to be returned.  The
+            Yield phase simply consists of yielding these elements as output.
+            </summary>
+            <typeparam name="TResult"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.TakeOrSkipQueryOperator`1.OutputOrdinalIndexState">
+            <summary>
+            Determines the order index state for the output operator
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.TakeOrSkipWhileQueryOperator`1">
+             <summary>
+             Take- and SkipWhile work similarly. Execution is broken into two phases: Search
+             and Yield.
+            
+             During the Search phase, many partitions at once search for the first occurrence
+             of a false element.  As they search, any time a partition finds a false element
+             whose index is lesser than the current lowest-known false element, the new index
+             will be published, so other partitions can stop the search.  The search stops
+             as soon as (1) a partition exhausts its input, (2) the predicate yields false for
+             one of the partition's elements, or (3) its input index passes the current lowest-
+             known index (sufficient since a given partition's indices are always strictly
+             incrementing -- asserted below).  Elements are buffered during this process.
+            
+             Partitions use a barrier after Search and before moving on to Yield.  Once all
+             have passed the barrier, Yielding begins.  At this point, the lowest-known false
+             index will be accurate for the entire set, since all partitions have finished
+             scanning.  This is where TakeWhile and SkipWhile differ.  TakeWhile will start at
+             the beginning of its buffer and yield all elements whose indices are less than
+             the lowest-known false index.  SkipWhile, on the other hand, will skipp any such
+             elements in the buffer, yielding those whose index is greater than or equal to
+             the lowest-known false index, and then finish yielding any remaining elements in
+             its data source (since it may have stopped prematurely due to (3) above).
+             </summary>
+             <typeparam name="TResult"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.TakeOrSkipWhileQueryOperator`1.OutputOrderIndexState">
+            <summary>
+            Determines the order index state for the output operator
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.WhereQueryOperator`1">
+            <summary>
+            The operator type for Where statements. This operator filters out elements that
+            don't match a filter function (supplied at instantiation time). 
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+        </member>
+        <member name="F:System.Linq.Parallel.CancellationState.POLL_INTERVAL">
+            <summary>
+            Poll frequency (number of loops per cancellation check) for situations where per-1-loop testing is too high an overhead. 
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.CancellationState.ThrowIfCanceled(System.Threading.CancellationToken)">
+            <summary>
+            Throws an OCE if the merged token has been canceled.
+            </summary>
+            <param name="token">A token to check for cancelation.</param>
+        </member>
+        <member name="T:System.Linq.Parallel.SpoolingTaskBase">
+            <summary>
+            A spooling task handles marshaling data from a producer to a consumer. It simply
+            takes data from a producer and hands it off to a consumer. This class is the base
+            class from which other concrete spooling tasks derive, encapsulating some common
+            logic (such as capturing exceptions).
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryTask">
+            <summary>
+            Simple abstract task representation, allowing either synchronous and asynchronous
+            execution. Subclasses override the Work API to implement the logic.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.PRODUCER_BUFFER_AUTO_SIZE">
+            <summary>
+            The number of elements to accumulate on the producer before copying the elements to the 
+            producer-consumer buffer. This constant is only used in the AutoBuffered mode.
+            
+            Experimentally, 16 appears to be sufficient buffer size to compensate for the synchronization
+            cost.
+            </summary>
+        </member>
+        <member name="F:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.m_autoBuffered">
+            <summary>
+            Whether the producer is allowed to buffer up elements before handing a chunk to the consumer.
+            If false, the producer will make each result available to the consumer immediately after it is
+            produced.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.#ctor(System.Linq.Parallel.QueryOperatorEnumerator{`0,System.Int32},System.Linq.Parallel.QueryTaskGroupState,System.Boolean[],System.Boolean[],System.Boolean[],System.Int32,System.Collections.Generic.Queue{System.Linq.Parallel.Pair{System.Int32,`0}}[],System.Object,System.Threading.Tasks.TaskScheduler,System.Boolean)">
+            <summary>
+            Constructor
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.SpoolingWork">
+            <summary>
+            This method is responsible for enumerating results and enqueueing them to
+            the output buffer as appropriate.  Each base class implements its own.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.Spool(System.Linq.Parallel.QueryTaskGroupState,System.Linq.Parallel.PartitionedStream{`0,System.Int32},System.Boolean[],System.Boolean[],System.Boolean[],System.Collections.Generic.Queue{System.Linq.Parallel.Pair{System.Int32,`0}}[],System.Object[],System.Threading.Tasks.TaskScheduler,System.Boolean)">
+            <summary>
+            Creates and begins execution of a new set of spooling tasks.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.OrderPreservingPipeliningSpoolingTask`1.SpoolingFinally">
+            <summary>
+            Dispose the underlying enumerator and wake up the consumer if necessary.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.OrderPreservingSpoolingTask`2">
+            <summary>
+            A spooling task handles marshaling data from a producer to a consumer. It's given
+            a single enumerator object that contains all of the production algorithms, a single
+            destination channel from which consumers draw results, and (optionally) a
+            synchronization primitive using which to notify asynchronous consumers. This
+            particular task variant preserves sort order in the final data.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.QueryTaskGroupState">
+            <summary>
+            A collection of tasks used by a single query instance. This type also offers some
+            convenient methods for tracing significant ETW events, waiting on tasks, propagating
+            exceptions, and performing cancellation activities.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.SpoolingTask">
+            <summary>
+            A factory class to execute spooling logic.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.StopAndGoSpoolingTask`2">
+            <summary>
+            A spooling task handles marshaling data from a producer to a consumer. It's given
+            a single enumerator object that contains all of the production algorithms, a single
+            destination channel from which consumers draw results, and (optionally) a
+            synchronization primitive using which to notify asynchronous consumers.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TIgnoreKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PipelineSpoolingTask`2">
+            <summary>
+            A spooling task handles marshaling data from a producer to a consumer. It's given
+            a single enumerator object that contains all of the production algorithms, a single
+            destination channel from which consumers draw results, and (optionally) a
+            synchronization primitive using which to notify asynchronous consumers.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TIgnoreKey"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ForAllSpoolingTask`2">
+            <summary>
+            A spooling task handles marshaling data from a producer to a consumer. It's given
+            a single enumerator object that contains all of the production algorithms, a single
+            destination channel from which consumers draw results, and (optionally) a
+            synchronization primitive using which to notify asynchronous consumers.
+            </summary>
+            <typeparam name="TInputOutput"></typeparam>
+            <typeparam name="TIgnoreKey"></typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.CancellableEnumerable.Wrap``1(System.Collections.Generic.IEnumerable{``0},System.Threading.CancellationToken)">
+            <summary>
+            Wraps an enumerable with a cancellation checker. The enumerator handed out by the source enumerable
+            will be wrapped by an object that periodically checks whether a particular cancellation token has
+            been cancelled. If so, the next call to MoveNext() will throw an OperationCancelledException.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ExceptionAggregator.WrapEnumerable``1(System.Collections.Generic.IEnumerable{``0},System.Linq.Parallel.CancellationState)">
+            <summary>
+            WrapEnumerable.ExceptionAggregator wraps the enumerable with another enumerator that will
+            catch exceptions, and wrap each with an AggregateException.
+            
+            If PLINQ decides to execute a query sequentially, we will reuse LINQ-to-objects
+            implementations for the different operators. However, we still need to throw
+            AggregateException in the cases when parallel execution would have thrown an
+            AggregateException. Thus, we introduce a wrapper enumerator that catches exceptions
+            and wraps them with an AggregateException.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ExceptionAggregator.WrapQueryEnumerator``2(System.Linq.Parallel.QueryOperatorEnumerator{``0,``1},System.Linq.Parallel.CancellationState)">
+            <summary>
+            A variant of WrapEnumerable that accepts a QueryOperatorEnumerator{,} instead of an IEnumerable{}.
+            The code duplication is necessary to avoid extra virtual method calls that would otherwise be needed to
+            convert the QueryOperatorEnumerator{,} to an IEnumerator{}.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ExceptionAggregator.ThrowOCEorAggregateException(System.Exception,System.Linq.Parallel.CancellationState)">
+            <summary>
+            Accepts an exception, wraps it as if it was crossing the parallel->sequential boundary, and throws the
+            wrapped exception. In sequential fallback cases, we use this method to throw exceptions that are consistent
+            with exceptions thrown by PLINQ when the query is executed by worker tasks.
+            
+            The exception will be wrapped into an AggregateException, except for the case when the query is being
+            legitimately cancelled, in which case we will propagate the CancellationException with the appropriate
+            token.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ExceptionAggregator.WrapFunc``2(System.Func{``0,``1},System.Linq.Parallel.CancellationState)">
+            <summary>
+            Wraps a function with a try/catch that morphs all exceptions into AggregateException.
+            </summary>
+            <typeparam name="T">The input argument type.</typeparam>
+            <typeparam name="U">The return value type.</typeparam>
+            <param name="f">A function to use internally.</param>
+            <param name="cancellationState">The cancellation state to use.</param>
+            <returns>A new function containing exception wrapping logic.</returns>
+        </member>
+        <member name="T:System.Linq.Parallel.ExchangeUtilities">
+            <summary>
+            ExchangeUtilities is a static class that contains helper functions to partition and merge
+            streams. 
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.NoKeyMemoizationRequired">
+            <summary>
+            Used during hash partitioning, when the keys being memoized are not used for anything.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.FixedMaxHeap`1">
+            <summary>
+            Very simple heap data structure, of fixed size.
+            </summary>
+            <typeparam name="TElement"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.GrowingArray`1">
+            <summary>
+            A growing array. Unlike List{T}, it makes the internal array available to its user.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.HashLookup`2">
+            <summary>
+            A simple hash map data structure, derived from the LINQ set we also use.
+            </summary>
+            <typeparam name="TKey">The kind of keys contained within.</typeparam>
+            <typeparam name="TValue">The kind of values contained within.</typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ListChunk`1">
+            <summary>
+            A linked list of array chunks. Allows direct access to its arrays.
+            </summary>
+            <typeparam name="TInputOutput">The elements held within.</typeparam>
+        </member>
+        <member name="M:System.Linq.Parallel.ListChunk`1.#ctor(System.Int32)">
+            <summary>
+            Allocates a new root chunk of a particular size.
+            </summary>
+        </member>
+        <member name="M:System.Linq.Parallel.ListChunk`1.Add(`0)">
+            <summary>
+            Adds an element to this chunk.  Only ever called on the root.
+            </summary>
+            <param name="e">The new element.</param>
+        </member>
+        <member name="M:System.Linq.Parallel.ListChunk`1.GetEnumerator">
+            <summary>
+            Fetches an enumerator to walk the elements in all chunks rooted from this one.
+            </summary>
+        </member>
+        <member name="P:System.Linq.Parallel.ListChunk`1.Next">
+            <summary>
+            The next chunk in the linked chain.
+            </summary>
+        </member>
+        <member name="P:System.Linq.Parallel.ListChunk`1.Count">
+            <summary>
+            The number of elements contained within this particular chunk.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.Lookup`2">
+             <summary>
+             Lookup class implements the ILookup interface. Lookup is very similar to a dictionary
+             except multiple values are allowed to map to the same key, and null keys are supported.
+            
+             Support for null keys adds an issue because the Dictionary class Lookup uses for
+             storage does not support null keys. So, we need to treat null keys separately.
+             Unfortunately, since TKey may be a value type, we cannot test whether the key is null
+             using the user-specified equality comparer.
+            
+             C# does allow us to compare the key against null using the == operator, but there is a
+             possibility that the user's equality comparer considers null to be equal to other values.
+             Now, MSDN documentation specifies that if IEqualityComparer.Equals(x,y) returns true, it
+             must be the case that x and y have the same hash code, and null has no hash code. Despite
+             that, we might as well support the use case, even if it is bad practice.
+            
+             The solution the Lookup class uses is to treat the key default(TKey) as a special case,
+             and hold its associated grouping - if any - in a special field instead of inserting it
+             into a dictionary.
+             </summary>
+             <typeparam name="TKey"></typeparam>
+             <typeparam name="TElement"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.Pair`2">
+            <summary>
+            A pair just wraps two bits of data into a single addressable unit. This is a
+            value type to ensure it remains very lightweight, since it is frequently used
+            with other primitive data types as well.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <typeparam name="U"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.PairComparer`2">
+            <summary>
+            PairComparer compares pairs by the first element, and breaks ties by the second
+            element.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <typeparam name="U"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.ReverseComparer`1">
+            <summary>
+            Comparer that wraps another comparer, and flips the result of each comparison to the
+            opposite answer.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.Set`1">
+            <summary>
+            A set for various operations. Shamelessly stolen from LINQ's source code.
+            @TODO: can the Linq one be used directly now that we are in System.Core
+            </summary>
+            <typeparam name="TElement">The kind of elements contained within.</typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.Shared`1">
+            <summary>
+            A very simple primitive that allows us to share a value across multiple threads.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.Util">
+            <summary>
+            Common miscellaneous utility methods used throughout the code-base.
+            </summary>
+        </member>
+        <member name="T:System.Linq.Parallel.Wrapper`1">
+            <summary>
+            A struct to wrap any arbitrary object reference or struct.  Used for situations
+            where we can't tolerate null values (like keys for hashtables).
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.Parallel.WrapperEqualityComparer`1">
+            <summary>
+            Compares two wrapped structs of the same underlying type for equality.  Simply
+            wraps the actual comparer for the type being wrapped.
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="T:System.Linq.OrderedParallelQuery`1">
+            <summary>
+            Represents a sorted, parallel sequence.
+            </summary>
+        </member>
+        <member name="M:System.Linq.OrderedParallelQuery`1.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the sequence.
+            </summary>
+            <returns>An enumerator that iterates through the sequence.</returns>
+        </member>
+        <member name="T:System.Linq.ParallelExecutionMode">
+            <summary>
+            The query execution mode is a hint that specifies how the system should handle
+            performance trade-offs when parallelizing queries.
+            </summary>
+        </member>
+        <member name="F:System.Linq.ParallelExecutionMode.Default">
+            <summary>
+            By default, the system will use algorithms for queries
+            that are ripe for parallelism and will avoid algorithms with high 
+            overheads that will likely result in slow downs for parallel execution. 
+            </summary>
+        </member>
+        <member name="F:System.Linq.ParallelExecutionMode.ForceParallelism">
+            <summary>
+            Parallelize the entire query, even if that means using high-overhead algorithms.
+            </summary>
+        </member>
+        <member name="T:System.Threading.Tasks.TaskExtensions">
+            <summary>
+            Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of 
+            <see cref="T:System.Threading.Tasks.Task"/> instances.
+            </summary>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExtensions.Unwrap(System.Threading.Tasks.Task{System.Threading.Tasks.Task})">
+            <summary>
+            Creates a proxy <see cref="T:System.Threading.Tasks.Task">Task</see> that represents the 
+            asynchronous operation of a Task{Task}.
+            </summary>
+            <remarks>
+            It is often useful to be able to return a Task from a <see cref="T:System.Threading.Tasks.Task`1">
+            Task{TResult}</see>, where the inner Task represents work done as part of the outer Task{TResult}.  However, 
+            doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior.  Unwrap 
+            solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}.
+            </remarks>
+            <param name="task">The Task{Task} to unwrap.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown if the 
+            <paramref name="task"/> argument is null.</exception>
+            <returns>A Task that represents the asynchronous operation of the provided Task{Task}.</returns>
+        </member>
+        <member name="M:System.Threading.Tasks.TaskExtensions.Unwrap``1(System.Threading.Tasks.Task{System.Threading.Tasks.Task{``0}})">
+            <summary>
+            Creates a proxy <see cref="T:System.Threading.Tasks.Task`1">Task{TResult}</see> that represents the 
+            asynchronous operation of a Task{Task{TResult}}.
+            </summary>
+            <remarks>
+            It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} 
+            represents work done as part of the outer Task{TResult}.  However, doing so results in a Task{Task{TResult}}, 
+            which, if not dealt with carefully, could produce unexpected behavior.  Unwrap solves this problem by 
+            creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}.
+            </remarks>
+            <param name="task">The Task{Task{TResult}} to unwrap.</param>
+            <exception cref="T:System.ArgumentNullException">The exception that is thrown if the 
+            <paramref name="task"/> argument is null.</exception>
+            <returns>A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}.</returns>        /// <summary>Unwraps a Task that returns another Task.</summary>
+        </member>
+    </members>
+</doc>

+ 8 - 0
Unity/Assets/CSharp 6.0 Support/AsyncTools/Plugins/System.Threading.xml.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0016c9be79865ae43ab56dab4c60e2d9
+timeCreated: 1431533940
+licenseType: Pro
+TextScriptImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/CSharp 6.0 Support/Editor.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f5851f88ad65c574cae1d6d39bf704b4
+folderAsset: yes
+timeCreated: 1446591068
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Unity/Assets/CSharp 6.0 Support/Editor/CSharp60Support.dll


+ 22 - 0
Unity/Assets/CSharp 6.0 Support/Editor/CSharp60Support.dll.meta

@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: e6afa6c5125e5af4289ce4bf422f504a
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  platformData:
+    Any:
+      enabled: 0
+      settings: {}
+    Editor:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+    WindowsStoreApps:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Editor.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e434eeb6ae87e9b44a362be94ab03701
+folderAsset: yes
+timeCreated: 1463827001
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Editor/ReferenceCollectorEditor.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: e185caf77a9b68b49a0b8c0a9d4687cb
+folderAsset: yes
+timeCreated: 1463827014
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 129 - 0
Unity/Assets/Editor/ReferenceCollectorEditor/ReferenceCollectorEditor.cs

@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+
+[CustomEditor(typeof(ReferenceCollector))]
+[CanEditMultipleObjects]
+public class ReferenceCollectorEditor : Editor
+{
+	private string searchKey
+	{
+		get
+		{
+			return _searchKey;
+		}
+		set
+		{
+			if (_searchKey != value)
+			{
+				_searchKey = value;
+				heroPrefab = referenceCollector.Get<UnityEngine.Object>(searchKey);
+			}
+		}
+	}
+
+	private ReferenceCollector referenceCollector;
+
+	private UnityEngine.Object heroPrefab = null;
+
+	private string _searchKey = "";
+
+	private void DelNullReference()
+	{
+		var dataProperty = serializedObject.FindProperty("data");
+		for (int i = dataProperty.arraySize - 1; i >= 0; i--)
+		{
+			var gameObjectProperty = dataProperty.GetArrayElementAtIndex(i).FindPropertyRelative("gameObject");
+			if (gameObjectProperty.objectReferenceValue == null)
+			{
+				dataProperty.DeleteArrayElementAtIndex(i);
+			}
+		}
+	}
+
+	private void OnEnable()
+	{
+		referenceCollector = (ReferenceCollector)target;
+	}
+
+	public override void OnInspectorGUI()
+	{
+		Undo.RecordObject(referenceCollector, "Changed Settings");
+		var dataProperty = serializedObject.FindProperty("data");
+		GUILayout.BeginHorizontal();
+		if (GUILayout.Button("添加引用"))
+		{
+			AddReference(dataProperty, Guid.NewGuid().GetHashCode().ToString(), null);
+		}
+		if (GUILayout.Button("全部删除"))
+		{
+			dataProperty.ClearArray();
+		}
+		if (GUILayout.Button("删除空引用"))
+		{
+			DelNullReference();
+		}
+		if (GUILayout.Button("排序"))
+		{
+			referenceCollector.Sort();
+		}
+		EditorGUILayout.EndHorizontal();
+		EditorGUILayout.BeginHorizontal();
+		searchKey = EditorGUILayout.TextField(searchKey);
+		EditorGUILayout.ObjectField(heroPrefab, typeof(UnityEngine.Object), false);
+		if (GUILayout.Button("删除"))
+		{
+			referenceCollector.Remove(searchKey);
+			heroPrefab = null;
+		}
+		GUILayout.EndHorizontal();
+		EditorGUILayout.Space();
+
+		var delList = new List<int>();
+		for (int i = referenceCollector.data.Count - 1; i >= 0; i--)
+		{
+			GUILayout.BeginHorizontal();
+			referenceCollector.data[i].key = EditorGUILayout.TextField(referenceCollector.data[i].key, GUILayout.Width(150));
+			referenceCollector.data[i].gameObject = EditorGUILayout.ObjectField(referenceCollector.data[i].gameObject, typeof(UnityEngine.Object), true);
+			if (GUILayout.Button("X"))
+			{
+				delList.Add(i);
+			}
+			GUILayout.EndHorizontal();
+		}
+		var eventType = Event.current.type;
+		if (eventType == EventType.DragUpdated || eventType == EventType.DragPerform)
+		{
+			// Show a copy icon on the drag
+			DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
+
+			if (eventType == EventType.DragPerform)
+			{
+				DragAndDrop.AcceptDrag();
+				foreach (var o in DragAndDrop.objectReferences)
+				{
+					AddReference(dataProperty, o.name, o);
+				}
+			}
+
+			Event.current.Use();
+		}
+		foreach (var i in delList)
+		{
+			dataProperty.DeleteArrayElementAtIndex(i);
+		}
+		serializedObject.ApplyModifiedProperties();
+		serializedObject.UpdateIfDirtyOrScript();
+	}
+
+	private void AddReference(SerializedProperty dataProperty, string key, UnityEngine.Object obj)
+	{
+		int index = dataProperty.arraySize;
+		dataProperty.InsertArrayElementAtIndex(index);
+		var element = dataProperty.GetArrayElementAtIndex(index);
+		element.FindPropertyRelative("key").stringValue = key;
+		element.FindPropertyRelative("gameObject").objectReferenceValue = obj;
+	}
+}

+ 12 - 0
Unity/Assets/Editor/ReferenceCollectorEditor/ReferenceCollectorEditor.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 35ce3f8ca2662a349a91ad46d2fb92e9
+timeCreated: 1463827070
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 4 - 0
Unity/Assets/Plugins/CLRSharp.meta

@@ -1,5 +1,9 @@
 fileFormatVersion: 2
 guid: 16029f96e8f84644bac80f48e815cc31
 folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
 DefaultImporter:
   userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Plugins/CLRSharp/CLRSharp.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9a80101e9c7555844b56435cc88caa35
+folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 301 - 0
Unity/Assets/Plugins/CLRSharp/CLRSharp/CLRSharp_Env.cs

@@ -0,0 +1,301 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+
+    public class CLRSharp_Environment : ICLRSharp_Environment
+    {
+        public string version
+        {
+            get
+            {
+                return "0.50.1Beta";
+            }
+        }
+        public ICLRSharp_Logger logger
+        {
+            get;
+            private set;
+        }
+        public CLRSharp_Environment(ICLRSharp_Logger logger)
+        {
+            this.logger = logger;
+            logger.Log_Warning("CLR# Ver:" + version + " Inited.");
+
+            this.RegCrossBind(new CrossBind_IEnumerable());
+            this.RegCrossBind(new CrossBind_IEnumerator());
+            this.RegCrossBind(new CrossBind_IDisposable());
+       }
+        Dictionary<string, ICLRType> mapType = new Dictionary<string, ICLRType>();
+        //public Dictionary<string, Mono.Cecil.ModuleDefinition> mapModule = new Dictionary<string, Mono.Cecil.ModuleDefinition>();
+        public void LoadModule(System.IO.Stream dllStream)
+        {
+            LoadModule(dllStream, null, null);
+        }
+        public void LoadModule(System.IO.Stream dllStream, System.IO.Stream pdbStream, Mono.Cecil.Cil.ISymbolReaderProvider debugInfoLoader)
+        {
+            var module = Mono.Cecil.ModuleDefinition.ReadModule(dllStream);
+            if (debugInfoLoader != null && pdbStream != null)
+            {
+                module.ReadSymbols(debugInfoLoader.GetSymbolReader(module, pdbStream));
+            }
+            if (module.HasAssemblyReferences)
+            {
+                foreach (var ar in module.AssemblyReferences)
+                {
+                    if (moduleref.Contains(ar.Name) == false)
+                        moduleref.Add(ar.Name);
+                    if (moduleref.Contains(ar.FullName) == false)
+                        moduleref.Add(ar.FullName);
+                }
+            }
+            //mapModule[module.Name] = module;
+            if (module.HasTypes)
+            {
+                foreach (var t in module.Types)
+                {
+
+                    mapType[t.FullName] = new Type_Common_CLRSharp(this, t);
+
+                }
+            }
+
+        }
+        public List<System.Reflection.Assembly> assemblylist;
+        public void AddSerachAssembly(System.Reflection.Assembly assembly)
+        {
+            if (assemblylist == null)
+                assemblylist = new List<System.Reflection.Assembly>();
+            assemblylist.Add(assembly);
+        }
+        public void LoadModule_OnlyName(System.IO.Stream dllStream)
+        {
+            var module = Mono.Cecil.ModuleDefinition.ReadModule(dllStream);
+            if (moduleref.Contains(module.Name) == false)
+                moduleref.Add(module.Name);
+            if (module.HasAssemblyReferences)
+            {
+                foreach (var ar in module.AssemblyReferences)
+                {
+                    if (moduleref.Contains(ar.Name) == false)
+                        moduleref.Add(ar.Name);
+                }
+            }
+        }
+
+        List<string> moduleref = new List<string>();
+        public string[] GetAllTypes()
+        {
+            string[] array = new string[mapType.Count];
+            mapType.Keys.CopyTo(array, 0);
+            return array;
+        }
+        public string[] GetModuleRefNames()
+        {
+            return moduleref.ToArray();
+        }
+        //得到类型的时候应该得到模块内Type或者真实Type
+        //一个统一的Type,然后根据具体情况调用两边
+
+        public ICLRType GetType(string fullname)
+        {
+            try
+            {
+                ICLRType type = null;
+                bool b = mapType.TryGetValue(fullname, out type);
+                if (!b)
+                {
+                    List<ICLRType> subTypes = new List<ICLRType>();
+                    if (fullname.Contains("<>") || fullname.Contains("/"))//匿名类型
+                    {
+                        string[] subts = fullname.Split('/');
+                        ICLRType ft = GetType(subts[0]);
+                        if (ft is ICLRType_Sharp)
+                        {
+                            for (int i = 1; i < subts.Length; i++)
+                            {
+                                ft = ft.GetNestType(this, subts[i]);
+                            }
+                            return ft;
+                        }
+                    }
+                    string fullnameT = fullname;//.Replace('/', '+');
+
+                    if (fullnameT.Contains("<"))
+                    {
+                        string outname = "";
+                        int depth = 0;
+                        int lastsplitpos = 0;
+                        for (int i = 0; i < fullname.Length; i++)
+                        {
+                            string checkname = null;
+                            if (fullname[i] == '/')
+                            {
+
+                            }
+                            else if (fullname[i] == '<')
+                            {
+                                if (i != 0)
+                                    depth++;
+                                if (depth == 1)//
+                                {
+                                    lastsplitpos = i;
+                                    outname += "[";
+                                    continue;
+                                }
+
+                            }
+                            else if (fullname[i] == '>')
+                            {
+                                if (depth == 1)
+                                {
+                                    checkname = fullnameT.Substring(lastsplitpos + 1, i - lastsplitpos - 1);
+                                    var subtype = GetType(checkname);
+                                    subTypes.Add(subtype);
+                                    if (!subtype.IsEnum() && subtype is ICLRType_Sharp)
+                                    {
+                                        subtype = GetType(typeof(CLRSharp_Instance));
+                                    }
+                                    outname += "[" + subtype.FullNameWithAssembly + "]";
+                                    lastsplitpos = i;
+                                }
+                                //if(depth>0)
+                                depth--;
+                                if (depth == 0)
+                                {
+                                    outname += "]";
+                                    continue;
+                                }
+                                else if (depth < 0)
+                                {
+                                    depth = 0;
+                                }
+                            }
+                            else if (fullname[i] == ',')
+                            {
+                                if (depth == 1)
+                                {
+                                    checkname = fullnameT.Substring(lastsplitpos + 1, i - lastsplitpos - 1);
+                                    var subtype = GetType(checkname);
+                                    subTypes.Add(subtype);
+
+                                    if (!subtype.IsEnum() && subtype is ICLRType_Sharp)
+                                    {
+
+                                        subtype = GetType(typeof(CLRSharp_Instance));
+                                    }
+
+                                    outname += "[" + subtype.FullNameWithAssembly + "],";
+                                    lastsplitpos = i;
+                                }
+                            }
+                            if (depth == 0)
+                            {
+                                outname += fullnameT[i];
+                            }
+                        }
+                        fullnameT = outname;
+                        //    fullnameT = fullnameT.Replace('<', '[');
+                        //fullnameT = fullnameT.Replace('>', ']');
+
+
+                    }
+                    fullnameT = fullnameT.Replace('/', '+');
+                    System.Type t = System.Type.GetType(fullnameT);
+
+                    if (t == null)
+                    {
+                        if (assemblylist != null)
+                        {
+                            foreach (var i in assemblylist)
+                            {
+                                t = i.GetType(fullnameT);
+                                if (t != null)
+                                    break;
+                            }
+                        }
+                        if (t == null)
+                        {
+                            foreach (var rm in moduleref)
+                            {
+                                t = System.Type.GetType(fullnameT + "," + rm);
+                                if (t != null)
+                                {
+                                    fullnameT = fullnameT + "," + rm;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+
+                    if (t != null)
+                    {
+                        //之所以做这么扭曲的设计,是因为Unity的Type.Fullname 实现错误,导致在Unity环境Type.FullName不一致
+                        if (t.FullName.Contains("CLRSharp.CLRSharp_Instance") == false)
+                        {
+                            b = mapType.TryGetValue(t.FullName, out type);
+                            if (b)
+                            {
+                                //mapType[fullname] = type;
+                                return type;
+                            }
+                            type = new Type_Common_System(this, t, subTypes.ToArray());
+                            mapType[t.FullName] = type;
+                            return type;
+                        }
+                        else
+                        {
+
+                        }
+                        type = new Type_Common_System(this, t, subTypes.ToArray());
+                        mapType[fullname] = type;
+                        //mapType[t.FullName] = type;
+                    }
+
+                }
+                return type;
+            }
+            catch (Exception err)
+            {
+                throw new Exception("Error in getType:" + fullname, err);
+            }
+        }
+
+
+        public ICLRType GetType(System.Type systemType)
+        {
+            ICLRType type = null;
+            bool b = mapType.TryGetValue(systemType.FullName, out type);
+            if (!b)
+            {
+                type = new Type_Common_System(this, systemType, null);
+                mapType[systemType.FullName] = type;
+            }
+            return type;
+        }
+        public void RegType(ICLRType type)
+        {
+            mapType[type.FullName] = type;
+        }
+
+        /// <summary>
+        /// 交叉绑定工具,让脚本继承程序类型用的
+        /// </summary>
+        Dictionary<Type, ICrossBind> crossBind = new Dictionary<Type, ICrossBind>();
+        public void RegCrossBind(ICrossBind bind)
+        {
+            crossBind[bind.Type] = bind;
+        }
+
+        public ICrossBind GetCrossBind(Type type)
+        {
+            ICrossBind bind = null;
+
+            crossBind.TryGetValue(type, out bind);
+            return bind;
+        }
+
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/CLRSharp_Env.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/CLRSharp_Env.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: fb600bfb3104e1441b86c333adb58227
+guid: 8ccc354edaf0ba741be8ccabea8f28b9
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/CrossBind.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 02ec683e7227bf54abc8638cf3be69e5
+guid: d37db62475788664f90cb1e611fd8cb2
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 136 - 106
Unity/Assets/Plugins/CLRSharp/CrossBind/Yield.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind/Yield.cs

@@ -1,106 +1,136 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public class CrossBind_IEnumerable : ICrossBind
-    {
-        public Type Type
-        {
-            get { return typeof(IEnumerable); }
-        }
-
-        public object CreateBind(CLRSharp_Instance inst)
-        {
-            return new Base_IEnumerable(inst);
-        }
-
-        class Base_IEnumerable : IEnumerable
-        {
-            CLRSharp_Instance inst;
-            public Base_IEnumerable(CLRSharp_Instance inst)
-            {
-                this.inst = inst;
-
-            }
-
-            public IEnumerator GetEnumerator()
-            {
-                var context = ThreadContext.activeContext;
-                var _type = context.environment.GetType(typeof(IEnumerable));
-                var _method = this.inst.type.GetMethod(_type.FullName+"."+"GetEnumerator", MethodParamList.constEmpty());
-                var obj = _method.Invoke(context, inst, null) as CLRSharp_Instance;
-
-                return context.environment.GetCrossBind(typeof(IEnumerator)).CreateBind(obj) as IEnumerator;
-            }
-        }
-    }
-    public class CrossBind_IEnumerator : ICrossBind
-    {
-        public Type Type
-        {
-            get { return typeof(IEnumerator); }
-        }
-
-        public object CreateBind(CLRSharp_Instance inst)
-        {
-            return new Base_IEnumerator(inst);
-        }
-
-        class Base_IEnumerator : IEnumerator
-        {
-            CLRSharp_Instance inst;
-            public Base_IEnumerator(CLRSharp_Instance inst)
-            { 
-                var context = ThreadContext.activeContext;
-                this.inst = inst;
-                var ms = this.inst.type.GetMethodNames();
-                foreach(string name in ms)
-                {
-                    if(name.Contains("MoveNext"))
-                        _MoveNext = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
-                    if (name.Contains(".get_Current"))
-                        _get_Current = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
-                    if (name.Contains(".Reset"))
-                        _Reset = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
-                }
-            }
-            IMethod _MoveNext;
-            IMethod _get_Current;
-            IMethod _Reset;
-
-
-            public object Current
-            {
-                get
-                {
-                    var context = ThreadContext.activeContext;
-                    var obj = _get_Current.Invoke(context, inst, null);
-
-                    return obj;
-                }
-            }
-
-            public bool MoveNext()
-            {
-                var context = ThreadContext.activeContext;
-                var obj = _MoveNext.Invoke(context, inst, null) as VBox;
-
-                return obj.ToBool();
-            }
-
-            public void Reset()
-            {
-                var context = ThreadContext.activeContext;
-
-                var obj = _Reset.Invoke(context, inst, null);
-
-            }
-        }
-    }
-
-}
-
-
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public class CrossBind_IDisposable : ICrossBind
+    {
+        public Type Type
+        {
+            get { return typeof(IDisposable); }
+
+        }
+        public object CreateBind(CLRSharp_Instance inst)
+        {
+            return new Base_IDisposable(inst);
+        }
+
+        class Base_IDisposable : IDisposable
+        {
+            CLRSharp_Instance inst;
+            public Base_IDisposable(CLRSharp_Instance inst)
+            {
+                this.inst = inst;
+
+            }
+
+            public void Dispose()
+            {
+                var context = ThreadContext.activeContext;
+                var _type = context.environment.GetType(typeof(IDisposable));
+                var _method = this.inst.type.GetMethod(_type.FullName + "." + "Dispose", MethodParamList.constEmpty());
+                object obj = _method.Invoke(context, inst, null);
+
+            }
+        }
+    }
+    public class CrossBind_IEnumerable : ICrossBind
+    {
+        public Type Type
+        {
+            get { return typeof(IEnumerable); }
+
+        }
+        public object CreateBind(CLRSharp_Instance inst)
+        {
+            return new Base_IEnumerable(inst);
+        }
+
+        class Base_IEnumerable : IEnumerable
+        {
+            CLRSharp_Instance inst;
+            public Base_IEnumerable(CLRSharp_Instance inst)
+            {
+                this.inst = inst;
+
+            }
+
+            public IEnumerator GetEnumerator()
+            {
+                var context = ThreadContext.activeContext;
+                var _type = context.environment.GetType(typeof(IEnumerable));
+                var _method = this.inst.type.GetMethod(_type.FullName+"."+"GetEnumerator", MethodParamList.constEmpty());
+                object obj = _method.Invoke(context, inst, null);
+                return obj as IEnumerator;
+            }
+        }
+    }
+    public class CrossBind_IEnumerator : ICrossBind
+    {
+        public Type Type
+        {
+            get { return typeof(IEnumerator); }
+        }
+
+        public object CreateBind(CLRSharp_Instance inst)
+        {
+            return new Base_IEnumerator(inst);
+        }
+
+        class Base_IEnumerator : IEnumerator
+        {
+            CLRSharp_Instance inst;
+            public Base_IEnumerator(CLRSharp_Instance inst)
+            { 
+                var context = ThreadContext.activeContext;
+                this.inst = inst;
+                var ms = this.inst.type.GetMethodNames();
+                foreach(string name in ms)
+                {
+                    if(name.Contains("MoveNext"))
+                        _MoveNext = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
+                    if (name.Contains(".get_Current"))
+                        _get_Current = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
+                    if (name.Contains(".Reset"))
+                        _Reset = this.inst.type.GetMethod(name, MethodParamList.constEmpty());
+                }
+            }
+            IMethod _MoveNext;
+            IMethod _get_Current;
+            IMethod _Reset;
+
+
+            public object Current
+            {
+                get
+                {
+                    var context = ThreadContext.activeContext;
+                    var obj = _get_Current.Invoke(context, inst, null);
+
+                    return obj;
+                }
+            }
+
+            public bool MoveNext()
+            {
+                var context = ThreadContext.activeContext;
+                var obj = _MoveNext.Invoke(context, inst, null) as VBox;
+
+                return obj.ToBool();
+            }
+
+            public void Reset()
+            {
+                var context = ThreadContext.activeContext;
+
+                var obj = _Reset.Invoke(context, inst, null);
+
+            }
+        }
+    }
+
+}
+
+

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/CrossBind/Yield.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/CrossBind/Yield.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 05580974f557ad243a9da9ead771061e
+guid: 5ffc4ee9ef8edac438f8f1a4fac47a41
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Execute.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: aa53d6b785dcbf54592add81af72cde8
+guid: 04af843a480fd934dbe8166135358b22
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 494 - 0
Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/CodeBody.cs

@@ -0,0 +1,494 @@
+using Mono.Cecil.Cil;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public enum CodeEx
+    {
+        Nop,
+        Break,
+        Ldarg_0,
+        Ldarg_1,
+        Ldarg_2,
+        Ldarg_3,
+        Ldloc_0,
+        Ldloc_1,
+        Ldloc_2,
+        Ldloc_3,
+        Stloc_0,
+        Stloc_1,
+        Stloc_2,
+        Stloc_3,
+        Ldarg_S,
+        Ldarga_S,
+        Starg_S,
+        Ldloc_S,
+        Ldloca_S,
+        Stloc_S,
+        Ldnull,
+        Ldc_I4_M1,
+        Ldc_I4_0,
+        Ldc_I4_1,
+        Ldc_I4_2,
+        Ldc_I4_3,
+        Ldc_I4_4,
+        Ldc_I4_5,
+        Ldc_I4_6,
+        Ldc_I4_7,
+        Ldc_I4_8,
+        Ldc_I4_S,
+        Ldc_I4,
+        Ldc_I8,
+        Ldc_R4,
+        Ldc_R8,
+        Dup,
+        Pop,
+        Jmp,
+        Call,
+        Calli,
+        Ret,
+        Br_S,
+        Brfalse_S,
+        Brtrue_S,
+        Beq_S,
+        Bge_S,
+        Bgt_S,
+        Ble_S,
+        Blt_S,
+        Bne_Un_S,
+        Bge_Un_S,
+        Bgt_Un_S,
+        Ble_Un_S,
+        Blt_Un_S,
+        Br,
+        Brfalse,
+        Brtrue,
+        Beq,
+        Bge,
+        Bgt,
+        Ble,
+        Blt,
+        Bne_Un,
+        Bge_Un,
+        Bgt_Un,
+        Ble_Un,
+        Blt_Un,
+        Switch,
+        Ldind_I1,
+        Ldind_U1,
+        Ldind_I2,
+        Ldind_U2,
+        Ldind_I4,
+        Ldind_U4,
+        Ldind_I8,
+        Ldind_I,
+        Ldind_R4,
+        Ldind_R8,
+        Ldind_Ref,
+        Stind_Ref,
+        Stind_I1,
+        Stind_I2,
+        Stind_I4,
+        Stind_I8,
+        Stind_R4,
+        Stind_R8,
+        Add,
+        Sub,
+        Mul,
+        Div,
+        Div_Un,
+        Rem,
+        Rem_Un,
+        And,
+        Or,
+        Xor,
+        Shl,
+        Shr,
+        Shr_Un,
+        Neg,
+        Not,
+        Conv_I1,
+        Conv_I2,
+        Conv_I4,
+        Conv_I8,
+        Conv_R4,
+        Conv_R8,
+        Conv_U4,
+        Conv_U8,
+        Callvirt,
+        Cpobj,
+        Ldobj,
+        Ldstr,
+        Newobj,
+        Castclass,
+        Isinst,
+        Conv_R_Un,
+        Unbox,
+        Throw,
+        Ldfld,
+        Ldflda,
+        Stfld,
+        Ldsfld,
+        Ldsflda,
+        Stsfld,
+        Stobj,
+        Conv_Ovf_I1_Un,
+        Conv_Ovf_I2_Un,
+        Conv_Ovf_I4_Un,
+        Conv_Ovf_I8_Un,
+        Conv_Ovf_U1_Un,
+        Conv_Ovf_U2_Un,
+        Conv_Ovf_U4_Un,
+        Conv_Ovf_U8_Un,
+        Conv_Ovf_I_Un,
+        Conv_Ovf_U_Un,
+        Box,
+        Newarr,
+        Ldlen,
+        Ldelema,
+        Ldelem_I1,
+        Ldelem_U1,
+        Ldelem_I2,
+        Ldelem_U2,
+        Ldelem_I4,
+        Ldelem_U4,
+        Ldelem_I8,
+        Ldelem_I,
+        Ldelem_R4,
+        Ldelem_R8,
+        Ldelem_Ref,
+        Stelem_I,
+        Stelem_I1,
+        Stelem_I2,
+        Stelem_I4,
+        Stelem_I8,
+        Stelem_R4,
+        Stelem_R8,
+        Stelem_Ref,
+        Ldelem_Any,
+        Stelem_Any,
+        Unbox_Any,
+        Conv_Ovf_I1,
+        Conv_Ovf_U1,
+        Conv_Ovf_I2,
+        Conv_Ovf_U2,
+        Conv_Ovf_I4,
+        Conv_Ovf_U4,
+        Conv_Ovf_I8,
+        Conv_Ovf_U8,
+        Refanyval,
+        Ckfinite,
+        Mkrefany,
+        Ldtoken,
+        Conv_U2,
+        Conv_U1,
+        Conv_I,
+        Conv_Ovf_I,
+        Conv_Ovf_U,
+        Add_Ovf,
+        Add_Ovf_Un,
+        Mul_Ovf,
+        Mul_Ovf_Un,
+        Sub_Ovf,
+        Sub_Ovf_Un,
+        Endfinally,
+        Leave,
+        Leave_S,
+        Stind_I,
+        Conv_U,
+        Arglist,
+        Ceq,
+        Cgt,
+        Cgt_Un,
+        Clt,
+        Clt_Un,
+        Ldftn,
+        Ldvirtftn,
+        Ldarg,
+        Ldarga,
+        Starg,
+        Ldloc,
+        Ldloca,
+        Stloc,
+        Localloc,
+        Endfilter,
+        Unaligned,
+        Volatile,
+        Tail,
+        Initobj,
+        Constrained,
+        Cpblk,
+        Initblk,
+        No,
+        Rethrow,
+        Sizeof,
+        Refanytype,
+        Readonly,
+    }
+
+
+    public class CodeBody
+    {
+        //以后准备用自定义Body采集一遍,可以先过滤处理掉Mono.Cecil的代码中的指向,执行会更快
+        public CodeBody(CLRSharp.ICLRSharp_Environment env, Mono.Cecil.MethodDefinition _def)
+        {
+            this.method = _def;
+            Init(env);
+        }
+        public MethodParamList typelistForLoc = null;
+        Mono.Cecil.MethodDefinition method;
+        public Mono.Cecil.Cil.MethodBody bodyNative
+        {
+            get
+            {
+                return method.Body;
+            }
+        }
+        bool bInited = false;
+        public void Init(CLRSharp.ICLRSharp_Environment env)
+        {
+            if (bInited) return;
+            if (bodyNative.HasVariables)
+            {
+                typelistForLoc = new MethodParamList(env, bodyNative.Variables);
+            }
+            for (int i = 0; i < bodyNative.Instructions.Count; i++)
+            {
+                var code = bodyNative.Instructions[i];
+                OpCode c = new OpCode();
+                c.code = (CodeEx)(int)code.OpCode.Code;
+                c.addr = code.Offset;
+                if (code.SequencePoint != null)
+                {
+                    if (debugDoc == null)
+                        debugDoc = new Dictionary<string, int>();
+                    if (debugDoc.ContainsKey(code.SequencePoint.Document.Url) == false)
+                    {
+                        debugDoc.Add(code.SequencePoint.Document.Url, code.SequencePoint.StartLine);
+                    }
+                    c.debugline = code.SequencePoint.StartLine;
+
+                }
+
+                this.opCodes.Add(c);
+                addr[c.addr] = i; ;
+            }
+            var context = ThreadContext.activeContext;
+            for (int i = 0; i < bodyNative.Instructions.Count; i++)
+            {
+                OpCode c = opCodes[i];
+                var code = bodyNative.Instructions[i];
+                c.InitToken(context, this, code.Operand);
+            }
+            bInited = true;
+        }
+        public class OpCode
+        {
+            public override string ToString()
+            {
+                return "IL_" + addr.ToString("X04") + " " + code;
+            }
+            public int addr;
+            public CodeEx code;
+            public int debugline = -1;
+
+            public object tokenUnknown;
+            public int tokenAddr_Index;
+            //public int tokenAddr;
+            public int[] tokenAddr_Switch;
+            public ICLRType tokenType;
+            public IField tokenField;
+            public IMethod tokenMethod;
+            public int tokenI32;
+            public Int64 tokenI64;
+            public float tokenR32;
+            public double tokenR64;
+            public string tokenStr;
+            public void InitToken(ThreadContext context, CodeBody body, object _p)
+            {
+                switch (code)
+                {
+                    case CodeEx.Leave:
+                    case CodeEx.Leave_S:
+                    case CodeEx.Br:
+                    case CodeEx.Br_S:
+                    case CodeEx.Brtrue:
+                    case CodeEx.Brtrue_S:
+                    case CodeEx.Brfalse:
+                    case CodeEx.Brfalse_S:
+                    //比较流程控制
+                    case CodeEx.Beq:
+                    case CodeEx.Beq_S:
+                    case CodeEx.Bne_Un:
+                    case CodeEx.Bne_Un_S:
+                    case CodeEx.Bge:
+                    case CodeEx.Bge_S:
+                    case CodeEx.Bge_Un:
+                    case CodeEx.Bge_Un_S:
+                    case CodeEx.Bgt:
+                    case CodeEx.Bgt_S:
+                    case CodeEx.Bgt_Un:
+                    case CodeEx.Bgt_Un_S:
+                    case CodeEx.Ble:
+                    case CodeEx.Ble_S:
+                    case CodeEx.Ble_Un:
+                    case CodeEx.Ble_Un_S:
+                    case CodeEx.Blt:
+                    case CodeEx.Blt_S:
+                    case CodeEx.Blt_Un:
+                    case CodeEx.Blt_Un_S:
+                        //this.tokenAddr = ((Mono.Cecil.Cil.Instruction)_p).Offset;
+                        this.tokenAddr_Index = body.addr[((Mono.Cecil.Cil.Instruction)_p).Offset];
+                        break;
+                    case CodeEx.Isinst:
+                    case CodeEx.Constrained:
+                    case CodeEx.Box:
+                    case CodeEx.Initobj:
+                    case CodeEx.Castclass:
+                    case CodeEx.Newarr:
+                        this.tokenType = context.GetType(_p);
+                        //this.tokenUnknown = _p;
+                        break;
+                    case CodeEx.Ldfld:
+                    case CodeEx.Ldflda:
+                    case CodeEx.Ldsfld:
+                    case CodeEx.Ldsflda:
+                    case CodeEx.Stfld:
+                    case CodeEx.Stsfld:
+                        this.tokenField = context.GetField(_p);
+                        //this.tokenUnknown = _p;
+                        break;
+                    case CodeEx.Call:
+                    case CodeEx.Callvirt:
+                    case CodeEx.Newobj:
+                    case CodeEx.Ldftn:
+                    case CodeEx.Ldvirtftn:
+
+                            this.tokenMethod = context.GetMethod(_p);
+ 
+                        break;
+                    case CodeEx.Ldc_I4:
+                        this.tokenI32 = (int)_p;
+                        break;
+                    case CodeEx.Ldc_I4_S:
+                        this.tokenI32 = (int)Convert.ToDecimal(_p);
+                        break;
+                    case CodeEx.Ldc_I4_M1:
+                        this.tokenI32 = -1;
+                        break;
+                    case CodeEx.Ldc_I4_0:
+                        this.tokenI32 = 0;
+                        break;
+                    case CodeEx.Ldc_I4_1:
+                        this.tokenI32 = 1;
+                        break;
+                    case CodeEx.Ldc_I4_2:
+                        this.tokenI32 = 2;
+                        break;
+                    case CodeEx.Ldc_I4_3:
+                        this.tokenI32 = 3;
+                        break;
+                    case CodeEx.Ldc_I4_4:
+                        this.tokenI32 = 4;
+                        break;
+                    case CodeEx.Ldc_I4_5:
+                        this.tokenI32 = 5;
+                        break;
+                    case CodeEx.Ldc_I4_6:
+                        this.tokenI32 = 6;
+                        break;
+                    case CodeEx.Ldc_I4_7:
+                        this.tokenI32 = 7;
+                        break;
+                    case CodeEx.Ldc_I4_8:
+                        this.tokenI32 = 8;
+                        break;
+                    case CodeEx.Ldc_I8:
+                        this.tokenI64 = (Int64)_p;
+                        break;
+                    case CodeEx.Ldc_R4:
+                        this.tokenR32 = (float)_p;
+                        break;
+                    case CodeEx.Ldc_R8:
+                        this.tokenR64 = (double)_p;
+                        break;
+
+                    case CodeEx.Ldstr:
+                        this.tokenStr = _p as string;
+                        break;
+
+                    case CodeEx.Ldloca:
+                    case CodeEx.Ldloca_S:
+                    case CodeEx.Ldloc_S:
+                    case CodeEx.Stloc_S:
+                        this.tokenI32 = ((VariableDefinition)_p).Index;
+                        //this.tokenUnknown = _p;
+                        break;
+                    case CodeEx.Ldloc:
+                    case CodeEx.Stloc:
+                        this.tokenI32 = (int)_p;
+                        break;
+                    case CodeEx.Ldloc_0:
+                        this.tokenI32 = 0;
+                        break;
+                    case CodeEx.Ldloc_1:
+                        this.tokenI32 = 1;
+                        break;
+                    case CodeEx.Ldloc_2:
+                        this.tokenI32 = 2;
+                        break;
+                    case CodeEx.Ldloc_3:
+                        this.tokenI32 = 3;
+                        break;
+
+                    case CodeEx.Ldarga:
+                    case CodeEx.Ldarga_S:
+                    case CodeEx.Starg:
+                    case CodeEx.Starg_S:
+                        this.tokenI32 = (_p as Mono.Cecil.ParameterDefinition).Index;
+                        break;
+                    case CodeEx.Switch:
+                        {
+                            Mono.Cecil.Cil.Instruction[] e = _p as Mono.Cecil.Cil.Instruction[];
+                            tokenAddr_Switch = new int[e.Length];
+                            for (int i = 0; i < e.Length; i++)
+                            {
+                                tokenAddr_Switch[i] = body.addr[(e[i].Offset)];
+                            }
+
+                        }
+                        break;
+                    case CodeEx.Ldarg:
+                        this.tokenI32 = (int)_p;
+                        break;
+                    case CodeEx.Ldarg_S:
+                        this.tokenI32 = (_p as Mono.Cecil.ParameterReference).Index;
+                        break;
+                    case CodeEx.Volatile:
+                    case CodeEx.  Ldind_I1:
+                    case CodeEx.  Ldind_U1:
+                    case CodeEx.   Ldind_I2:
+                    case CodeEx.  Ldind_U2:
+                    case CodeEx.  Ldind_I4:
+                    case CodeEx.  Ldind_U4:
+                    case CodeEx.  Ldind_I8:
+                    case CodeEx.   Ldind_I:
+                    case CodeEx.  Ldind_R4:
+                    case CodeEx.  Ldind_R8:
+                    case CodeEx.  Ldind_Ref:
+                        break;
+                    default:
+                        this.tokenUnknown = _p;
+                        break;
+                }
+            }
+        }
+        public Dictionary<string, int> debugDoc = new Dictionary<string, int>();
+        public List<OpCode> opCodes = new List<OpCode>();
+        public Dictionary<int, int> addr = new Dictionary<int, int>();
+        public string doc;
+
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Execute/CodeBody.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/CodeBody.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 056e3d478983cf240af39ae2bc551dea
+guid: e0f95d2a1c9a9af47969f5c0df59af53
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1256 - 1195
Unity/Assets/Plugins/CLRSharp/Execute/Context.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/Context.cs

@@ -1,1195 +1,1256 @@
-using Mono.Cecil.Cil;
-using System;
-using System.Collections.Generic;
-
-
-namespace CLRSharp
-{
-    /// <summary>
-    /// 线程上下文
-    /// 一个线程上下文表示一次调用,直到结束
-    /// </summary>
-    public class ThreadContext
-    {
-        [ThreadStatic]
-        static ThreadContext _activeContext = null;
-        public static ThreadContext activeContext
-        {
-            get
-            {
-                return _activeContext;
-            }
-        }
-        public ICLRSharp_Environment environment
-        {
-            get;
-            private set;
-        }
-        public int DebugLevel
-        {
-            get;
-            private set;
-        }
-        public ThreadContext(ICLRSharp_Environment env)
-        {
-            this.environment = env;
-            DebugLevel = 0;
-        }
-        public ThreadContext(ICLRSharp_Environment env, int DebugLevel)
-        {
-            this.environment = env;
-            this.DebugLevel = DebugLevel;
-        }
-        public Stack<StackFrame> GetStackFrames()
-        {
-            return stacks;
-        }
-        Stack<StackFrame> stacks = new Stack<StackFrame>();
-        public bool SetNoTry = false;
-        public string Dump()
-        {
-            string str = "";
-            foreach (StackFrame s in GetStackFrames())
-            {
-                var pos = s._pos;
-
-                Instruction sqIns = pos;
-                while (sqIns != null && sqIns.SequencePoint == null)
-                {
-                    sqIns = sqIns.Previous;
-                }
-                if (sqIns != null && sqIns.SequencePoint != null)
-                {
-                    str += sqIns.SequencePoint.Document.Url + "(" + sqIns.SequencePoint.StartLine + ")\n";
-                }
-                else
-                {
-                    str +="!no pdb info,no code filename(no line)!\n";
-                }
-                if (pos == null)
-                {
-                    continue;
-                }
-                str += "    IL " + pos.ToString() + "\n";
-                if (s._params != null)
-                {
-                    str += "    ===Params(" + s._params.Length + ")===\n";
-                    for (int i = 0; i < s._params.Length; i++)
-                    {
-                        str += "        param" + i.ToString("D04") + s._params[i] + "\n";
-                    }
-                }
-                str += "    ===VarSlots(" + s.slotVar.Count + ")===\n";
-                for (int i = 0; i < s.slotVar.Count; i++)
-                {
-                    str += "        var" + i.ToString("D04") + s.slotVar[i] + "\n";
-                }
-            }
-            return str;
-        }
-        public object ExecuteFunc(IMethod_Sharp method, object _this, object[] _params)
-        {
-            _activeContext = this;
-            if (this.DebugLevel >= 9)
-            {
-                environment.logger.Log("<Call>::" + method.DeclaringType.FullName + "::" + method.Name.ToString());
-
-            }
-            StackFrame stack = new StackFrame(method.Name, method.isStatic);
-            stacks.Push(stack);
-
-            object[] _withp = null;
-            bool isctor = method.Name == ".ctor";
-            if (isctor)
-            {
-                //CLRSharp_Instance pthis = new CLRSharp_Instance(GetType(func.ReturnType) as Type_Common_CLRSharp);
-                //StackFrame.RefObj pthis = new StackFrame.RefObj(stack, 0, StackFrame.RefType.arg);
-                _withp = new object[_params == null ? 1 : (_params.Length + 1)];
-                if (_params != null)
-                    _params.CopyTo(_withp, 1);
-                _withp[0] = _this;
-            }
-            else
-            {
-                if (!method.isStatic)
-                {
-                    _withp = new object[(_params == null) ? 1 : (_params.Length + 1)];
-                    _withp[0] = _this;
-                    if (_params != null)
-                        _params.CopyTo(_withp, 1);
-                }
-                else
-                {
-                    _withp = _params;
-                }
-            }
-            stack.SetParams(_withp);
-
-            if (method.body != null)
-            {
-                stack.Init(method.body);
-                stack._pos = method.body.bodyNative.Instructions[0];
-
-                if (method.body.bodyNative.HasExceptionHandlers && !SetNoTry)
-                {
-                    RunCodeWithTry(method.body, stack);
-                }
-                else
-                {
-                    RunCode(stack, method.body);
-                }
-            }
-
-            if (this.DebugLevel >= 9)
-            {
-                environment.logger.Log("<CallEnd>");
-
-            }
-            var ret = stacks.Pop().Return();
-
-            return isctor ? _this : ret;
-
-            //if (func.HasBody)
-            //{
-            //    RunCode(stack, func.Body.Instructions);
-            //}
-            //var ret = stacks.Pop().Return();
-            //if (this.DebugLevel >= 9)
-            //{
-            //    environment.logger.Log("<CallEnd>");
-
-            //}
-            //return ret;
-
-
-
-        }
-
-        private void RunCodeWithTry(CodeBody body, StackFrame stack)
-        {
-            try
-            {
-
-                RunCode(stack, body);
-
-            }
-            catch (Exception err)
-            {
-                bool bEH = false;
-                if (body.bodyNative.HasExceptionHandlers)
-                {
-                    bEH = JumpToErr(body, stack, err);
-                }
-                if (!bEH)
-                {
-                    throw err;
-                }
-            }
-        }
-        ICLRType GetType(string fullname)
-        {
-            var type = environment.GetType(fullname);
-            ICLRType_Sharp stype = type as ICLRType_Sharp;
-            if (stype != null && stype.NeedCCtor)
-            {
-                //执行.cctor
-                stype.InvokeCCtor(this);
-            }
-            return type;
-        }
-
-        ICLRType GetType(object token)
-        {
-            token.GetHashCode();
-            Mono.Cecil.ModuleDefinition module = null;
-            string typename = null;
-            if (token is Mono.Cecil.TypeDefinition)
-            {
-                Mono.Cecil.TypeDefinition _def = (token as Mono.Cecil.TypeDefinition);
-                module = _def.Module;
-                typename = _def.FullName;
-            }
-            else if (token is Mono.Cecil.TypeReference)
-            {
-                Mono.Cecil.TypeReference _ref = (token as Mono.Cecil.TypeReference);
-                module = _ref.Module;
-                typename = _ref.FullName;
-            }
-            else
-            {
-                throw new NotImplementedException();
-            }
-            return GetType(typename);
-        }
-        Dictionary<int, IMethod> methodCache = new Dictionary<int, IMethod>();
-        Dictionary<int, IField> fieldCache = new Dictionary<int, IField>();
-        IMethod GetMethod(object token)
-        {
-            IMethod __method = null;
-            if (methodCache.TryGetValue(token.GetHashCode(), out __method))
-            {
-                return __method;
-            }
-            Mono.Cecil.ModuleDefinition module = null;
-            string methodname = null;
-            string typename = null;
-            MethodParamList genlist = null;
-            MethodParamList list = null;
-            if (token is Mono.Cecil.MethodReference)
-            {
-                Mono.Cecil.MethodReference _ref = (token as Mono.Cecil.MethodReference);
-                module = _ref.Module;
-                methodname = _ref.Name;
-                typename = _ref.DeclaringType.FullName;
-                list = new MethodParamList(environment, _ref);
-                if (_ref.IsGenericInstance)
-                {
-                    Mono.Cecil.GenericInstanceMethod gmethod = _ref as Mono.Cecil.GenericInstanceMethod;
-                    genlist = new MethodParamList(environment, gmethod);
-
-                }
-            }
-            else if (token is Mono.Cecil.MethodDefinition)
-            {
-                Mono.Cecil.MethodDefinition _def = token as Mono.Cecil.MethodDefinition;
-                module = _def.Module;
-                methodname = _def.Name;
-                typename = _def.DeclaringType.FullName;
-                list = new MethodParamList(environment, _def);
-                if (_def.IsGenericInstance)
-                {
-                    throw new NotImplementedException();
-                    //Mono.Cecil.GenericInstanceMethod gmethod = _def as Mono.Cecil.GenericInstanceMethod;
-                    //genlist = new MethodParamList(environment, gmethod);
-                }
-            }
-            else
-            {
-                throw new NotImplementedException();
-            }
-            var typesys = GetType(typename);
-            if (typesys == null)
-                throw new Exception("type can't find:" + typename);
-
-
-            IMethod _method = null;
-            if (genlist != null)
-            {
-                _method = typesys.GetMethodT(methodname, genlist, list);
-            }
-            else
-            {
-                _method = typesys.GetMethod(methodname, list);
-            }
-            methodCache[token.GetHashCode()] = _method;
-            return _method;
-        }
-        IMethod GetNewForArray(object token)
-        {
-            IMethod __method = null;
-            if (methodCache.TryGetValue(token.GetHashCode(), out __method))
-            {
-                return __method;
-            }
-            Mono.Cecil.ModuleDefinition module = null;
-            string typename = null;
-            if (token is Mono.Cecil.TypeDefinition)
-            {
-                Mono.Cecil.TypeDefinition _def = (token as Mono.Cecil.TypeDefinition);
-                module = _def.Module;
-                typename = _def.FullName;
-            }
-            else if (token is Mono.Cecil.TypeReference)
-            {
-                Mono.Cecil.TypeReference _ref = (token as Mono.Cecil.TypeReference);
-                module = _ref.Module;
-                typename = _ref.FullName;
-            }
-            else
-            {
-                throw new NotImplementedException();
-            }
-
-            ICLRType _Itype = GetType(typename);
-            typename += "[]";
-            //var _type = context.environment.GetType(typename, type.Module);
-            var _type = GetType(typename);
-
-            MethodParamList tlist = MethodParamList.const_OneParam_Int(environment);
-            var m = _type.GetMethod(".ctor", tlist);
-            methodCache[token.GetHashCode()] = m;
-            return m;
-        }
-        IField GetField(object token)
-        {
-            IField __field = null;
-            if (fieldCache.TryGetValue(token.GetHashCode(), out __field))
-            {
-                return __field;
-            }
-            if (token is Mono.Cecil.FieldDefinition)
-            {
-                Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition;
-                var type = GetType(field.DeclaringType.FullName);
-                __field = type.GetField(field.Name);
-
-
-
-            }
-            else if (token is Mono.Cecil.FieldReference)
-            {
-                Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference;
-                var type = GetType(field.DeclaringType.FullName);
-                __field = type.GetField(field.Name);
-
-
-            }
-            //else if(token is CLRSharp_Instance)
-            // {
-            //CLRSharp_Instance inst = token as CLRSharp_Instance;
-            //return inst.Fields[field.Name];
-            // }
-
-            else
-            {
-                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
-            }
-            fieldCache[token.GetHashCode()] = __field;
-            return __field;
-        }
-        object GetToken(object token)
-        {
-            if (token is Mono.Cecil.FieldDefinition || token is Mono.Cecil.FieldReference)
-            {
-
-                return GetField(token);
-
-            }
-
-            else if (token is Mono.Cecil.TypeDefinition || token is Mono.Cecil.TypeReference)
-            {
-                return GetType(token);
-            }
-            else
-            {
-                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
-            }
-        }
-        int GetParamPos(object token)
-        {
-            if (token is byte)
-            {
-                return (byte)token;
-            }
-            else if (token is sbyte)
-            {
-                return (sbyte)token;
-            }
-            else if (token is int)
-            {
-                return (int)token;
-            }
-            else if (token is Mono.Cecil.ParameterReference)
-            {
-                int i = (token as Mono.Cecil.ParameterReference).Index;
-                if (this.stacks.Peek().Name == ".ctor" || this.stacks.Peek().IsStatic == false)
-                {
-                    i++;
-                }
-                return i;
-            }
-            else
-            {
-                throw new NotImplementedException();
-            }
-        }
-        int GetBaseCount(Type _now, Type _base)
-        {
-            if (_now == _base)
-                return 0;
-            if (_now.IsSubclassOf(_base) == false)
-            {
-                return -1;
-            }
-            return GetBaseCount(_now.BaseType, _base) + 1;
-        }
-        bool JumpToErr(CodeBody body, StackFrame frame, Exception err)
-        {
-            var posnow = frame._pos;
-            List<Mono.Cecil.Cil.ExceptionHandler> ehs = new List<ExceptionHandler>();
-            Mono.Cecil.Cil.ExceptionHandler ehNear = null;
-            int ehNearB = -1;
-            foreach (var eh in body.bodyNative.ExceptionHandlers)
-            {
-                if (eh.HandlerType == ExceptionHandlerType.Catch)
-                {
-                    Type ehtype = GetType(eh.CatchType).TypeForSystem;
-                    if (ehtype == err.GetType() || err.GetType().IsSubclassOf(ehtype))
-                    //if(GetType(eh.CatchType)== environment.GetType(err.GetType()))
-                    {
-                        if (eh.TryStart.Offset <= posnow.Offset && eh.TryEnd.Offset >= posnow.Offset)
-                        {
-                            if (ehNear == null)
-                            {
-                                ehNear = eh;//第一个
-                                ehNearB = GetBaseCount(ehtype, err.GetType());
-                            }
-                            else
-                            {
-                                if (eh.TryStart.Offset > ehNear.TryStart.Offset || eh.TryEnd.Offset < ehNear.TryEnd.Offset)//范围更小
-                                {
-                                    ehNear = eh;
-                                    ehNearB = GetBaseCount(ehtype, err.GetType());
-                                }
-                                else if (eh.TryStart.Offset == ehNear.TryStart.Offset || eh.TryEnd.Offset == ehNear.TryEnd.Offset)//范围相等
-                                {
-                                    if (ehtype == err.GetType())//类型一致,没有比这个更牛的了
-                                    {
-                                        ehNear = eh;
-                                        ehNearB = GetBaseCount(ehtype, err.GetType());
-                                    }
-                                    else if (GetType(ehNear.CatchType).TypeForSystem == err.GetType())//上次找到的就是第一,不用比了
-                                    {
-                                        continue;
-                                    }
-                                    else //比较上次找到的类型,和这次找到的类型的亲缘性;
-                                    {
-                                        int newehNearB = GetBaseCount(ehtype, err.GetType());
-                                        if (newehNearB == -1) continue;
-                                        if (newehNearB < ehNearB)
-                                        {
-                                            ehNear = eh;
-                                            ehNearB = newehNearB;
-                                        }
-                                    }
-                                }
-                            }
-                            ehs.Add(eh);
-                        }
-                    }
-
-                }
-            }
-            if (ehNear != null)
-            {
-                frame.Ldobj(this, err);
-                frame._pos = ehNear.HandlerStart;
-                RunCodeWithTry(body, frame);
-                return true;
-            }
-            return false;
-        }
-
-        void RunCode(StackFrame stack, CodeBody body)
-        {
-            Mono.Collections.Generic.Collection<Mono.Cecil.Cil.Instruction> codes = body.bodyNative.Instructions;
-            while (true)
-            {
-                var code = stack._pos;
-                if (DebugLevel >= 9)
-                {
-                    environment.logger.Log(code.ToString());
-                }
-                switch (code.OpCode.Code)
-                {
-
-                    ///////////
-                    //流程控制
-
-                    case Code.Nop:
-                        stack.Nop();
-                        break;
-                    case Code.Ret:
-                        stack.Ret();
-                        return;
-                    case Code.Leave:
-                        stack.Leave(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Leave_S:
-                        //stack.Ret();
-                        stack.Leave(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    //流程控制之goto
-                    case Code.Br:
-                        stack.Br(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Br_S:
-                        stack.Br(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Brtrue:
-                        stack.Brtrue(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Brtrue_S:
-                        stack.Brtrue(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Brfalse:
-                        stack.Brfalse(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Brfalse_S:
-                        stack.Brfalse(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-
-                    //比较流程控制
-                    case Code.Beq:
-                        stack.Beq(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Beq_S:
-                        stack.Beq(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bne_Un:
-                        stack.Bne_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bne_Un_S:
-                        stack.Bne_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bge:
-                        stack.Bge(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bge_S:
-                        stack.Bge(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bge_Un:
-                        stack.Bge_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bge_Un_S:
-                        stack.Bge_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bgt:
-                        stack.Bgt(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bgt_S:
-                        stack.Bgt(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bgt_Un:
-                        stack.Bgt_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Bgt_Un_S:
-                        stack.Bge_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Ble:
-                        stack.Ble(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Ble_S:
-                        stack.Ble(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Ble_Un:
-                        stack.Ble_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Ble_Un_S:
-                        stack.Ble_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Blt:
-                        stack.Blt(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Blt_S:
-                        stack.Blt(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Blt_Un:
-                        stack.Blt_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    case Code.Blt_Un_S:
-                        stack.Ble_Un(code.Operand as Mono.Cecil.Cil.Instruction);
-                        break;
-                    //逻辑计算
-                    case Code.Ceq:
-                        stack.Ceq();
-                        break;
-                    case Code.Cgt:
-                        stack.Cgt();
-                        break;
-                    case Code.Cgt_Un:
-                        stack.Cgt_Un();
-                        break;
-                    case Code.Clt:
-                        stack.Clt();
-                        break;
-                    case Code.Clt_Un:
-                        stack.Clt_Un();
-                        break;
-                    case Code.Ckfinite:
-                        stack.Ckfinite();
-                        break;
-                    //常量加载
-                    case Code.Ldc_I4:
-                        stack.Ldc_I4((int)Convert.ToDecimal(code.Operand));
-                        break;
-                    case Code.Ldc_I4_S:
-                        stack.Ldc_I4((int)Convert.ToDecimal(code.Operand));
-                        break;
-                    case Code.Ldc_I4_M1:
-                        stack.Ldc_I4(-1);
-                        break;
-                    case Code.Ldc_I4_0:
-                        stack.Ldc_I4(0);
-                        break;
-                    case Code.Ldc_I4_1:
-                        stack.Ldc_I4(1);
-                        break;
-                    case Code.Ldc_I4_2:
-                        stack.Ldc_I4(2);
-                        break;
-                    case Code.Ldc_I4_3:
-                        stack.Ldc_I4(3);
-                        break;
-                    case Code.Ldc_I4_4:
-                        stack.Ldc_I4(4);
-                        break;
-                    case Code.Ldc_I4_5:
-                        stack.Ldc_I4(5);
-                        break;
-                    case Code.Ldc_I4_6:
-                        stack.Ldc_I4(6);
-                        break;
-                    case Code.Ldc_I4_7:
-                        stack.Ldc_I4(7);
-                        break;
-                    case Code.Ldc_I4_8:
-                        stack.Ldc_I4(8);
-                        break;
-                    case Code.Ldc_I8:
-                        stack.Ldc_I8((Int64)(Convert.ToDecimal(code.Operand)));
-                        break;
-                    case Code.Ldc_R4:
-                        stack.Ldc_R4((float)(Convert.ToDecimal(code.Operand)));
-                        break;
-                    case Code.Ldc_R8:
-                        stack.Ldc_R8((double)(Convert.ToDecimal(code.Operand)));
-                        break;
-
-                    //定义为临时变量
-                    case Code.Stloc:
-                        stack.Stloc((int)code.Operand);
-                        break;
-                    case Code.Stloc_S:
-                        stack.Stloc(((VariableDefinition)code.Operand).Index);
-                        break;
-                    case Code.Stloc_0:
-                        stack.Stloc(0);
-                        break;
-                    case Code.Stloc_1:
-                        stack.Stloc(1);
-                        break;
-                    case Code.Stloc_2:
-                        stack.Stloc(2);
-                        break;
-                    case Code.Stloc_3:
-                        stack.Stloc(3);
-                        break;
-                    //从临时变量加载
-                    case Code.Ldloc:
-                        stack.Ldloc((int)code.Operand);
-                        break;
-                    case Code.Ldloc_S:
-                        stack.Ldloc(((VariableDefinition)code.Operand).Index);
-                        break;
-                    case Code.Ldloc_0:
-                        stack.Ldloc(0);
-                        break;
-                    case Code.Ldloc_1:
-                        stack.Ldloc(1);
-                        break;
-                    case Code.Ldloc_2:
-                        stack.Ldloc(2);
-                        break;
-                    case Code.Ldloc_3:
-                        stack.Ldloc(3);
-                        break;
-                    case Code.Ldloca:
-                        stack.Ldloca(((VariableDefinition)code.Operand).Index);
-                        break;
-                    case Code.Ldloca_S:
-                        stack.Ldloca(((VariableDefinition)code.Operand).Index);
-                        break;
-                    //加载字符串
-                    case Code.Ldstr:
-                        stack.Ldstr(code.Operand as string);
-                        break;
-                    //呼叫函数
-                    case Code.Call:
-                        stack.Call(this, GetMethod(code.Operand), false);
-                        break;
-                    case Code.Callvirt:
-                        stack.Call(this, GetMethod(code.Operand), true);
-                        break;
-                    //算术指令
-                    case Code.Add:
-                        stack.Add();
-                        break;
-                    case Code.Sub:
-                        stack.Sub();
-                        break;
-                    case Code.Mul:
-                        stack.Mul();
-                        break;
-                    case Code.Div:
-                        stack.Div();
-                        break;
-                    case Code.Div_Un:
-                        stack.Div_Un();
-                        break;
-                    case Code.Rem:
-                        stack.Rem();
-                        break;
-                    case Code.Rem_Un:
-                        stack.Rem_Un();
-                        break;
-                    case Code.Neg:
-                        stack.Neg();
-                        break;
-
-                    //装箱
-                    case Code.Box:
-                        stack.Box(GetType(code.Operand));
-                        break;
-                    case Code.Unbox:
-                        stack.Unbox();
-                        break;
-                    case Code.Unbox_Any:
-                        stack.Unbox_Any();
-                        break;
-
-                    //加载参数
-                    case Code.Ldarg:
-                        stack.Ldarg((int)code.Operand);
-                        break;
-                    case Code.Ldarg_S:
-                        stack.Ldarg(GetParamPos(code.Operand));
-                        break;
-                    case Code.Ldarg_0:
-                        stack.Ldarg(0);
-                        break;
-                    case Code.Ldarg_1:
-                        stack.Ldarg(1);
-                        break;
-                    case Code.Ldarg_2:
-                        stack.Ldarg(2);
-                        break;
-                    case Code.Ldarg_3:
-                        stack.Ldarg(3);
-                        break;
-                    //转换
-                    case Code.Conv_I1:
-                        stack.Conv_I1();
-                        break;
-                    case Code.Conv_U1:
-                        stack.Conv_U1();
-                        break;
-                    case Code.Conv_I2:
-                        stack.Conv_I2();
-                        break;
-                    case Code.Conv_U2:
-                        stack.Conv_U2();
-                        break;
-                    case Code.Conv_I4:
-                        stack.Conv_I4();
-                        break;
-                    case Code.Conv_U4:
-                        stack.Conv_U4();
-                        break;
-                    case Code.Conv_I8:
-                        stack.Conv_I8();
-                        break;
-                    case Code.Conv_U8:
-                        stack.Conv_U8();
-                        break;
-                    case Code.Conv_I:
-                        stack.Conv_I();
-                        break;
-                    case Code.Conv_U:
-                        stack.Conv_U();
-                        break;
-                    case Code.Conv_R4:
-                        stack.Conv_R4();
-                        break;
-                    case Code.Conv_R8:
-                        stack.Conv_R8();
-                        break;
-                    case Code.Conv_R_Un:
-                        stack.Conv_R_Un();
-                        break;
-                    case Code.Conv_Ovf_I1:
-                        stack.Conv_Ovf_I1();
-                        break;
-                    case Code.Conv_Ovf_U1:
-                        stack.Conv_Ovf_U1();
-                        break;
-                    case Code.Conv_Ovf_I2:
-                        stack.Conv_Ovf_I2();
-                        break;
-                    case Code.Conv_Ovf_U2:
-                        stack.Conv_Ovf_U2();
-                        break;
-                    case Code.Conv_Ovf_I4:
-                        stack.Conv_Ovf_I4();
-                        break;
-                    case Code.Conv_Ovf_U4:
-                        stack.Conv_Ovf_U4();
-                        break;
-
-                    case Code.Conv_Ovf_I8:
-                        stack.Conv_Ovf_I8();
-                        break;
-                    case Code.Conv_Ovf_U8:
-                        stack.Conv_Ovf_U8();
-                        break;
-                    case Code.Conv_Ovf_I:
-                        stack.Conv_Ovf_I();
-                        break;
-                    case Code.Conv_Ovf_U:
-                        stack.Conv_Ovf_U();
-                        break;
-                    case Code.Conv_Ovf_I1_Un:
-                        stack.Conv_Ovf_I1_Un();
-                        break;
-
-                    case Code.Conv_Ovf_U1_Un:
-                        stack.Conv_Ovf_U1_Un();
-                        break;
-                    case Code.Conv_Ovf_I2_Un:
-                        stack.Conv_Ovf_I2_Un();
-                        break;
-                    case Code.Conv_Ovf_U2_Un:
-                        stack.Conv_Ovf_U2_Un();
-                        break;
-                    case Code.Conv_Ovf_I4_Un:
-                        stack.Conv_Ovf_I4_Un();
-                        break;
-                    case Code.Conv_Ovf_U4_Un:
-                        stack.Conv_Ovf_U4_Un();
-                        break;
-
-                    case Code.Conv_Ovf_I8_Un:
-                        stack.Conv_Ovf_I8_Un();
-                        break;
-                    case Code.Conv_Ovf_U8_Un:
-                        stack.Conv_Ovf_U8_Un();
-                        break;
-                    case Code.Conv_Ovf_I_Un:
-                        stack.Conv_Ovf_I_Un();
-                        break;
-                    case Code.Conv_Ovf_U_Un:
-                        stack.Conv_Ovf_U_Un();
-                        break;
-                    //数组
-                    case Code.Newarr:
-                        stack.NewArr(this, GetNewForArray(code.Operand));
-                        break;
-                    case Code.Ldlen:
-                        stack.LdLen();
-                        break;
-                    case Code.Ldelema:
-                        stack.Ldelema(code.Operand);
-                        break;
-                    case Code.Ldelem_I1:
-                        stack.Ldelem_I1();
-                        break;
-                    case Code.Ldelem_U1:
-                        stack.Ldelem_U1();
-                        break;
-                    case Code.Ldelem_I2:
-                        stack.Ldelem_I2();
-                        break;
-                    case Code.Ldelem_U2:
-                        stack.Ldelem_U2();
-                        break;
-                    case Code.Ldelem_I4:
-                        stack.Ldelem_I4();
-                        break;
-                    case Code.Ldelem_U4:
-                        stack.Ldelem_U4();
-                        break;
-                    case Code.Ldelem_I8:
-                        stack.Ldelem_I8();
-                        break;
-                    case Code.Ldelem_I:
-                        stack.Ldelem_I();
-                        break;
-                    case Code.Ldelem_R4:
-                        stack.Ldelem_R4();
-                        break;
-                    case Code.Ldelem_R8:
-                        stack.Ldelem_R8();
-                        break;
-                    case Code.Ldelem_Ref:
-                        stack.Ldelem_Ref();
-                        break;
-                    case Code.Ldelem_Any:
-                        stack.Ldelem_Any(code.Operand);
-                        break;
-
-                    case Code.Stelem_I:
-                        stack.Stelem_I();
-                        break;
-                    case Code.Stelem_I1:
-                        stack.Stelem_I1();
-                        break;
-                    case Code.Stelem_I2:
-                        stack.Stelem_I2();
-                        break;
-                    case Code.Stelem_I4:
-                        stack.Stelem_I4();
-                        break;
-                    case Code.Stelem_I8:
-                        stack.Stelem_I8();
-                        break;
-                    case Code.Stelem_R4:
-                        stack.Stelem_R4();
-                        break;
-                    case Code.Stelem_R8:
-                        stack.Stelem_R8();
-                        break;
-                    case Code.Stelem_Ref:
-                        stack.Stelem_Ref();
-                        break;
-                    case Code.Stelem_Any:
-                        stack.Stelem_Any();
-                        break;
-
-                    case Code.Newobj:
-                        stack.NewObj(this, GetMethod(code.Operand));
-                        break;
-
-                    case Code.Dup:
-                        stack.Dup();
-                        break;
-                    case Code.Pop:
-                        stack.Pop();
-                        break;
-
-                    case Code.Ldfld:
-                        stack.Ldfld(this, GetField(code.Operand));
-                        break;
-                    case Code.Ldflda:
-                        stack.Ldflda(this, GetField(code.Operand));
-                        break;
-                    case Code.Ldsfld:
-                        stack.Ldsfld(this, GetField(code.Operand));
-                        break;
-                    case Code.Ldsflda:
-                        stack.Ldsflda(this, GetField(code.Operand));
-                        break;
-                    case Code.Stfld:
-                        stack.Stfld(this, GetField(code.Operand));
-                        break;
-                    case Code.Stsfld:
-                        stack.Stsfld(this, GetField(code.Operand));
-                        break;
-
-
-                    case Code.Constrained:
-                        stack.Constrained(this, GetType(code.Operand));
-                        break;
-
-                    case Code.Isinst:
-                        stack.Isinst(this, GetType(code.Operand));
-                        break;
-                    case Code.Ldtoken:
-                        stack.Ldtoken(this, GetToken(code.Operand));
-                        break;
-
-                    case Code.Ldftn:
-                        stack.Ldftn(this, GetMethod(code.Operand));
-                        break;
-                    case Code.Ldvirtftn:
-                        stack.Ldvirtftn(this, GetMethod(code.Operand));
-                        break;
-                    case Code.Ldarga:
-                        stack.Ldarga(this, code.Operand);
-                        break;
-                    case Code.Ldarga_S:
-                        stack.Ldarga(this, code.Operand);
-                        break;
-                    case Code.Calli:
-                        stack.Calli(this, code.Operand);
-                        break;
-                    ///下面是还没有处理的指令
-                    case Code.Break:
-                        stack.Break(this, code.Operand);
-                        break;
-                    case Code.Starg_S:
-                        stack.Starg_S(this, code.Operand);
-                        break;
-                    case Code.Ldnull:
-                        stack.Ldnull();
-                        break;
-                    case Code.Jmp:
-                        stack.Jmp(this, code.Operand);
-                        break;
-                    case Code.Switch:
-                        stack.Switch(this, code.Operand as Mono.Cecil.Cil.Instruction[]);
-                        break;
-                    case Code.Ldind_I1:
-                        stack.Ldind_I1(this, code.Operand);
-                        break;
-                    case Code.Ldind_U1:
-                        stack.Ldind_U1(this, code.Operand);
-                        break;
-                    case Code.Ldind_I2:
-                        stack.Ldind_I2(this, code.Operand);
-                        break;
-                    case Code.Ldind_U2:
-                        stack.Ldind_U2(this, code.Operand);
-                        break;
-                    case Code.Ldind_I4:
-                        stack.Ldind_I4(this, code.Operand);
-                        break;
-                    case Code.Ldind_U4:
-                        stack.Ldind_U4(this, code.Operand);
-                        break;
-                    case Code.Ldind_I8:
-                        stack.Ldind_I8(this, code.Operand);
-                        break;
-                    case Code.Ldind_I:
-                        stack.Ldind_I(this, code.Operand);
-                        break;
-                    case Code.Ldind_R4:
-                        stack.Ldind_R4(this, code.Operand);
-                        break;
-                    case Code.Ldind_R8:
-                        stack.Ldind_R8(this, code.Operand);
-                        break;
-                    case Code.Ldind_Ref:
-                        stack.Ldind_Ref(this, code.Operand);
-                        break;
-                    case Code.Stind_Ref:
-                        stack.Stind_Ref(this, code.Operand);
-                        break;
-                    case Code.Stind_I1:
-                        stack.Stind_I1(this, code.Operand);
-                        break;
-                    case Code.Stind_I2:
-                        stack.Stind_I2(this, code.Operand);
-                        break;
-                    case Code.Stind_I4:
-                        stack.Stind_I4(this, code.Operand);
-                        break;
-                    case Code.Stind_I8:
-                        stack.Stind_I8(this, code.Operand);
-                        break;
-                    case Code.Stind_R4:
-                        stack.Stind_R4(this, code.Operand);
-                        break;
-                    case Code.Stind_R8:
-                        stack.Stind_R8(this, code.Operand);
-                        break;
-                    case Code.And:
-                        stack.And(this, code.Operand);
-                        break;
-                    case Code.Or:
-                        stack.Or(this, code.Operand);
-                        break;
-                    case Code.Xor:
-                        stack.Xor(this, code.Operand);
-                        break;
-                    case Code.Shl:
-                        stack.Shl(this, code.Operand);
-                        break;
-                    case Code.Shr:
-                        stack.Shr(this, code.Operand);
-                        break;
-                    case Code.Shr_Un:
-                        stack.Shr_Un(this, code.Operand);
-                        break;
-                    case Code.Not:
-                        stack.Not(this, code.Operand);
-                        break;
-                    case Code.Cpobj:
-                        stack.Cpobj(this, code.Operand);
-                        break;
-                    case Code.Ldobj:
-                        stack.Ldobj(this, code.Operand);
-                        break;
-                    case Code.Castclass:
-                        stack.Castclass(this, code.Operand);
-                        break;
-                    case Code.Throw:
-                        stack.Throw(this, code.Operand);
-                        break;
-                    case Code.Stobj:
-                        stack.Stobj(this, code.Operand);
-                        break;
-                    case Code.Refanyval:
-                        stack.Refanyval(this, code.Operand);
-                        break;
-                    case Code.Mkrefany:
-                        stack.Mkrefany(this, code.Operand);
-                        break;
-
-                    case Code.Add_Ovf:
-                        stack.Add_Ovf(this, code.Operand);
-                        break;
-                    case Code.Add_Ovf_Un:
-                        stack.Add_Ovf_Un(this, code.Operand);
-                        break;
-                    case Code.Mul_Ovf:
-                        stack.Mul_Ovf(this, code.Operand);
-                        break;
-                    case Code.Mul_Ovf_Un:
-                        stack.Mul_Ovf_Un(this, code.Operand);
-                        break;
-                    case Code.Sub_Ovf:
-                        stack.Sub_Ovf(this, code.Operand);
-                        break;
-                    case Code.Sub_Ovf_Un:
-                        stack.Sub_Ovf_Un(this, code.Operand);
-                        break;
-                    case Code.Endfinally:
-                        stack.Endfinally(this, code.Operand);
-                        break;
-                    case Code.Stind_I:
-                        stack.Stind_I(this, code.Operand);
-                        break;
-                    case Code.Arglist:
-                        stack.Arglist(this, code.Operand);
-                        break;
-
-                    case Code.Starg:
-                        stack.Starg(this, code.Operand);
-                        break;
-                    case Code.Localloc:
-                        stack.Localloc(this, code.Operand);
-                        break;
-                    case Code.Endfilter:
-                        stack.Endfilter(this, code.Operand);
-                        break;
-                    case Code.Unaligned:
-                        stack.Unaligned(this, code.Operand);
-                        break;
-                    case Code.Volatile:
-                        stack.Volatile(this, code.Operand);
-                        break;
-                    case Code.Tail:
-                        stack.Tail(this, code.Operand);
-                        break;
-                    case Code.Initobj:
-                        stack.Initobj(this, this.GetType(code.Operand));
-                        break;
-                    case Code.Cpblk:
-                        stack.Cpblk(this, code.Operand);
-                        break;
-                    case Code.Initblk:
-                        stack.Initblk(this, code.Operand);
-                        break;
-                    case Code.No:
-                        stack.No(this, code.Operand);
-                        break;
-                    case Code.Rethrow:
-                        stack.Rethrow(this, code.Operand);
-                        break;
-                    case Code.Sizeof:
-                        stack.Sizeof(this, code.Operand);
-                        break;
-                    case Code.Refanytype:
-                        stack.Refanytype(this, code.Operand);
-                        break;
-                    case Code.Readonly:
-                        stack.Readonly(this, code.Operand);
-                        break;
-                    default:
-                        throw new Exception("未实现的OpCode:" + code.OpCode.Code);
-                }
-            }
-
-        }
-    }
-}
+using Mono.Cecil.Cil;
+using System;
+using System.Collections.Generic;
+
+
+namespace CLRSharp
+{
+    /// <summary>
+    /// 线程上下文
+    /// 一个线程上下文表示一次调用,直到结束
+    /// </summary>
+    public class ThreadContext
+    {
+        [ThreadStatic]
+        static ThreadContext _activeContext = null;
+        public static ThreadContext activeContext
+        {
+            get
+            {
+                return _activeContext;
+            }
+        }
+        public ICLRSharp_Environment environment
+        {
+            get;
+            private set;
+        }
+        public int DebugLevel
+        {
+            get;
+            private set;
+        }
+        public ThreadContext(ICLRSharp_Environment env)
+        {
+            this.environment = env;
+            DebugLevel = 0;
+            if (_activeContext != null)
+            {
+                env.logger.Log_Error("在同一线程上多次创建ThreadContext");
+            }
+            _activeContext = this;
+
+        }
+        public ThreadContext(ICLRSharp_Environment env, int DebugLevel)
+        {
+            this.environment = env;
+            this.DebugLevel = DebugLevel;
+            if (_activeContext != null)
+            {
+                env.logger.Log_Error("在同一线程上多次创建ThreadContext");
+            }
+            _activeContext = this;
+
+        }
+        public Stack<StackFrame> GetStackFrames()
+        {
+            return stacks;
+        }
+        Stack<StackFrame> stacks = new Stack<StackFrame>();
+        public bool SetNoTry = false;
+        public string Dump()
+        {
+            string str = "";
+            foreach (StackFrame s in GetStackFrames())
+            {
+                var pos = s.GetCode();
+                Instruction sqIns = pos;
+                while (sqIns != null && sqIns.SequencePoint == null)
+                {
+                    sqIns = sqIns.Previous;
+                }
+                if (sqIns != null && sqIns.SequencePoint != null)
+                {
+                    str += sqIns.SequencePoint.Document.Url + "(" + sqIns.SequencePoint.StartLine + ")\n";
+                }
+                else
+                {
+                    str += "!no pdb info,no code filename(no line)!\n";
+                }
+                if (pos == null)
+                {
+                    continue;
+                }
+                str += "    IL " + pos.ToString() + "\n";
+                if (s._params != null)
+                {
+                    str += "    ===Params(" + s._params.Length + ")===\n";
+                    for (int i = 0; i < s._params.Length; i++)
+                    {
+                        str += "        param" + i.ToString("D04") + s._params[i] + "\n";
+                    }
+                }
+                str += "    ===VarSlots(" + s.slotVar.Count + ")===\n";
+                for (int i = 0; i < s.slotVar.Count; i++)
+                {
+                    str += "        var" + i.ToString("D04") + s.slotVar[i] + "\n";
+                }
+            }
+            return str;
+        }
+        public object ExecuteFunc(IMethod_Sharp method, object _this, object[] _params)
+        {
+            if (this.DebugLevel >= 9)
+            {
+                environment.logger.Log("<Call>::" + method.DeclaringType.FullName + "::" + method.Name.ToString());
+
+            }
+            StackFrame stack = new StackFrame(method.Name, method.isStatic);
+            stacks.Push(stack);
+
+            object[] _withp = null;
+            bool isctor = method.Name == ".ctor";
+            if (isctor)
+            {
+                //CLRSharp_Instance pthis = new CLRSharp_Instance(GetType(func.ReturnType) as Type_Common_CLRSharp);
+                //StackFrame.RefObj pthis = new StackFrame.RefObj(stack, 0, StackFrame.RefType.arg);
+                _withp = new object[_params == null ? 1 : (_params.Length + 1)];
+                if (_params != null)
+                    _params.CopyTo(_withp, 1);
+                _withp[0] = _this;
+            }
+            else
+            {
+                if (!method.isStatic)
+                {
+                    _withp = new object[(_params == null) ? 1 : (_params.Length + 1)];
+                    _withp[0] = _this;
+                    if (_params != null)
+                        _params.CopyTo(_withp, 1);
+                }
+                else
+                {
+                    _withp = _params;
+                }
+            }
+            stack.SetParams(_withp);
+
+            if (method.body != null)
+            {
+                stack.Init(method.body);
+                stack.SetCodePos(0);
+                //._pos = method.body.bodyNative.Instructions[0];
+                stack._codepos = 0;
+                if (method.body.bodyNative.HasExceptionHandlers && !SetNoTry)
+                {
+                    RunCodeWithTry(method.body, stack);
+                }
+                else
+                {
+                    RunCode(stack, method.body);
+                }
+            }
+
+            if (this.DebugLevel >= 9)
+            {
+                environment.logger.Log("<CallEnd>");
+
+            }
+            var ret = stacks.Pop().Return();
+
+            return isctor ? _this : ret;
+
+            //if (func.HasBody)
+            //{
+            //    RunCode(stack, func.Body.Instructions);
+            //}
+            //var ret = stacks.Pop().Return();
+            //if (this.DebugLevel >= 9)
+            //{
+            //    environment.logger.Log("<CallEnd>");
+
+            //}
+            //return ret;
+
+
+
+        }
+
+        private void RunCodeWithTry(CodeBody body, StackFrame stack)
+        {
+            try
+            {
+
+                RunCode(stack, body);
+
+            }
+            catch (Exception err)
+            {
+                bool bEH = false;
+                if (body.bodyNative.HasExceptionHandlers)
+                {
+                    bEH = JumpToErr(body, stack, err);
+                }
+                if (!bEH)
+                {
+                    throw err;
+                }
+            }
+        }
+        public ICLRType GetType(string fullname)
+        {
+            var type = environment.GetType(fullname);
+            ICLRType_Sharp stype = type as ICLRType_Sharp;
+            if (stype != null && stype.NeedCCtor)
+            {
+                //执行.cctor
+                stype.InvokeCCtor(this);
+            }
+            return type;
+        }
+
+        public ICLRType GetType(object token)
+        {
+            token.GetHashCode();
+            Mono.Cecil.ModuleDefinition module = null;
+            string typename = null;
+            if (token is Mono.Cecil.TypeDefinition)
+            {
+                Mono.Cecil.TypeDefinition _def = (token as Mono.Cecil.TypeDefinition);
+                module = _def.Module;
+                typename = _def.FullName;
+            }
+            else if (token is Mono.Cecil.TypeReference)
+            {
+                Mono.Cecil.TypeReference _ref = (token as Mono.Cecil.TypeReference);
+                module = _ref.Module;
+                typename = _ref.FullName;
+            }
+            else
+            {
+                throw new NotImplementedException();
+            }
+            return GetType(typename);
+        }
+        Dictionary<int, IMethod> methodCache = new Dictionary<int, IMethod>();
+        Dictionary<int, IField> fieldCache = new Dictionary<int, IField>();
+        public IMethod GetMethod(object token)
+        {
+            try
+            {
+                IMethod __method = null;
+                if (methodCache.TryGetValue(token.GetHashCode(), out __method))
+                {
+                    return __method;
+                }
+                Mono.Cecil.ModuleDefinition module = null;
+                string methodname = null;
+                string typename = null;
+                MethodParamList genlist = null;
+                MethodParamList list = null;
+                if (token is Mono.Cecil.MethodReference)
+                {
+                    Mono.Cecil.MethodReference _ref = (token as Mono.Cecil.MethodReference);
+                    module = _ref.Module;
+                    methodname = _ref.Name;
+                    typename = _ref.DeclaringType.FullName;
+                    list = new MethodParamList(environment, _ref);
+                    if (_ref.IsGenericInstance)
+                    {
+                        Mono.Cecil.GenericInstanceMethod gmethod = _ref as Mono.Cecil.GenericInstanceMethod;
+                        genlist = new MethodParamList(environment, gmethod);
+
+                    }
+                }
+                else if (token is Mono.Cecil.MethodDefinition)
+                {
+                    Mono.Cecil.MethodDefinition _def = token as Mono.Cecil.MethodDefinition;
+                    module = _def.Module;
+                    methodname = _def.Name;
+                    typename = _def.DeclaringType.FullName;
+                    list = new MethodParamList(environment, _def);
+                    if (_def.IsGenericInstance)
+                    {
+                        throw new NotImplementedException();
+                        //Mono.Cecil.GenericInstanceMethod gmethod = _def as Mono.Cecil.GenericInstanceMethod;
+                        //genlist = new MethodParamList(environment, gmethod);
+                    }
+                }
+                else
+                {
+                    throw new NotImplementedException();
+                }
+
+                var typesys = GetType(typename);
+                if (typesys == null)
+                {
+                    typename = typename.Replace("0...", "");
+                    typesys = GetType(typename);
+
+                }
+                if (typesys == null)
+                {
+                    throw new Exception("type can't find:" + typename);
+                }
+
+                IMethod _method = null;
+                if (genlist != null)
+                {
+                    _method = typesys.GetMethodT(methodname, genlist, list);
+                }
+                else
+                {
+                    _method = typesys.GetMethod(methodname, list);
+                }
+                methodCache[token.GetHashCode()] = _method;
+                return _method;
+            }
+            catch (Exception err)
+            {
+
+                throw new Exception("Error GetMethod==<这意味着这个函数无法被L#找到>" + token, err);
+            }
+        }
+        //IMethod GetNewForArray(object token)
+        //{
+        //    IMethod __method = null;
+        //    if (methodCache.TryGetValue(token.GetHashCode(), out __method))
+        //    {
+        //        return __method;
+        //    }
+        //    Mono.Cecil.ModuleDefinition module = null;
+        //    string typename = null;
+        //    if (token is Mono.Cecil.TypeDefinition)
+        //    {
+        //        Mono.Cecil.TypeDefinition _def = (token as Mono.Cecil.TypeDefinition);
+        //        module = _def.Module;
+        //        typename = _def.FullName;
+        //    }
+        //    else if (token is Mono.Cecil.TypeReference)
+        //    {
+        //        Mono.Cecil.TypeReference _ref = (token as Mono.Cecil.TypeReference);
+        //        module = _ref.Module;
+        //        typename = _ref.FullName;
+        //    }
+        //    else
+        //    {
+        //        throw new NotImplementedException();
+        //    }
+
+        //    ICLRType _type = null;
+        //    ICLRType _Itype = GetType(typename);
+        //    if (_Itype is ICLRType_Sharp)
+        //    {
+        //        _type = environment.GetType(typeof(CLRSharp.CLRSharp_Instance[]));
+        //    }
+        //    else
+        //    {
+        //        typename += "[]";
+        //        //var _type = context.environment.GetType(typename, type.Module);
+        //        _type = GetType(typename);
+
+        //    }
+        //    MethodParamList tlist = MethodParamList.const_OneParam_Int(environment);
+        //    var m = _type.GetMethod(".ctor", tlist);
+        //    methodCache[token.GetHashCode()] = m;
+        //    return m;
+        //}
+        public IField GetField(object token)
+        {
+            IField __field = null;
+            if (fieldCache.TryGetValue(token.GetHashCode(), out __field))
+            {
+                return __field;
+            }
+            if (token is Mono.Cecil.FieldDefinition)
+            {
+                Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition;
+                var type = GetType(field.DeclaringType.FullName);
+                __field = type.GetField(field.Name);
+
+
+
+            }
+            else if (token is Mono.Cecil.FieldReference)
+            {
+                Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference;
+                var type = GetType(field.DeclaringType.FullName);
+                __field = type.GetField(field.Name);
+
+
+            }
+            //else if(token is CLRSharp_Instance)
+            // {
+            //CLRSharp_Instance inst = token as CLRSharp_Instance;
+            //return inst.Fields[field.Name];
+            // }
+
+            else
+            {
+                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
+            }
+            fieldCache[token.GetHashCode()] = __field;
+            return __field;
+        }
+        object GetToken(object token)
+        {
+            if (token is Mono.Cecil.FieldDefinition || token is Mono.Cecil.FieldReference)
+            {
+                var def = token as Mono.Cecil.FieldDefinition;
+                if (def != null && def.Name[0] == '$') return def.InitialValue;
+                //都是用来初始化数组的方法,忽略
+
+                return GetField(token);
+
+            }
+
+            else if (token is Mono.Cecil.TypeDefinition || token is Mono.Cecil.TypeReference)
+            {
+                return GetType(token);
+            }
+            else
+            {
+                throw new NotImplementedException("不可处理的token" + token.GetType().ToString());
+            }
+        }
+        int GetParamPos(object token)
+        {
+            if (token is byte)
+            {
+                return (byte)token;
+            }
+            else if (token is sbyte)
+            {
+                return (sbyte)token;
+            }
+            else if (token is int)
+            {
+                return (int)token;
+            }
+            else if (token is Mono.Cecil.ParameterReference)
+            {
+                int i = (token as Mono.Cecil.ParameterReference).Index;
+                //if (this.stacks.Peek().Name == ".ctor" || this.stacks.Peek().IsStatic == false)
+                {
+                    //i++;
+                }
+                return i;
+            }
+            else
+            {
+                throw new NotImplementedException();
+            }
+        }
+        int GetBaseCount(Type _now, Type _base)
+        {
+            if (_now == _base)
+                return 0;
+            if (_now.IsSubclassOf(_base) == false)
+            {
+                return -1;
+            }
+            return GetBaseCount(_now.BaseType, _base) + 1;
+        }
+        bool JumpToErr(CodeBody body, StackFrame frame, Exception err)
+        {
+            var posnow = frame.GetCode();
+            List<Mono.Cecil.Cil.ExceptionHandler> ehs = new List<ExceptionHandler>();
+            Mono.Cecil.Cil.ExceptionHandler ehNear = null;
+            int ehNearB = -1;
+            foreach (var eh in body.bodyNative.ExceptionHandlers)
+            {
+                if (eh.HandlerType == ExceptionHandlerType.Catch)
+                {
+                    Type ehtype = GetType(eh.CatchType).TypeForSystem;
+                    if (ehtype == err.GetType() || err.GetType().IsSubclassOf(ehtype))
+                    //if(GetType(eh.CatchType)== environment.GetType(err.GetType()))
+                    {
+                        if (eh.TryStart.Offset <= posnow.Offset && eh.TryEnd.Offset >= posnow.Offset)
+                        {
+                            if (ehNear == null)
+                            {
+                                ehNear = eh;//第一个
+                                ehNearB = GetBaseCount(ehtype, err.GetType());
+                            }
+                            else
+                            {
+                                if (eh.TryStart.Offset > ehNear.TryStart.Offset || eh.TryEnd.Offset < ehNear.TryEnd.Offset)//范围更小
+                                {
+                                    ehNear = eh;
+                                    ehNearB = GetBaseCount(ehtype, err.GetType());
+                                }
+                                else if (eh.TryStart.Offset == ehNear.TryStart.Offset || eh.TryEnd.Offset == ehNear.TryEnd.Offset)//范围相等
+                                {
+                                    if (ehtype == err.GetType())//类型一致,没有比这个更牛的了
+                                    {
+                                        ehNear = eh;
+                                        ehNearB = GetBaseCount(ehtype, err.GetType());
+                                    }
+                                    else if (GetType(ehNear.CatchType).TypeForSystem == err.GetType())//上次找到的就是第一,不用比了
+                                    {
+                                        continue;
+                                    }
+                                    else //比较上次找到的类型,和这次找到的类型的亲缘性;
+                                    {
+                                        int newehNearB = GetBaseCount(ehtype, err.GetType());
+                                        if (newehNearB == -1) continue;
+                                        if (newehNearB < ehNearB)
+                                        {
+                                            ehNear = eh;
+                                            ehNearB = newehNearB;
+                                        }
+                                    }
+                                }
+                            }
+                            ehs.Add(eh);
+                        }
+                    }
+
+                }
+            }
+            if (ehNear != null)
+            {
+                frame.stackCalc.Push(err);
+                frame.SetCodePos(ehNear.HandlerStart.Offset);// ._pos = ehNear.HandlerStart;
+                RunCodeWithTry(body, frame);
+                return true;
+            }
+            return false;
+        }
+
+        void RunCode(StackFrame stack, CodeBody body)
+        {
+            while (true)
+            {
+                //var code = stack._pos;
+                int _pos = stack._codepos;
+                var _code = body.opCodes[_pos];
+                if (DebugLevel >= 9)
+                {
+                    environment.logger.Log(_code.ToString());
+                }
+                switch (_code.code)
+                {
+                    ///////////
+                    //流程控制
+                    case CodeEx.Nop:
+                        stack.Nop();
+                        break;
+                    case CodeEx.Ret:
+                        stack.Ret();
+                        return;
+                    case CodeEx.Leave:
+                        stack.Leave(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Leave_S:
+                        stack.Leave(_code.tokenAddr_Index);
+                        break;
+                    //流程控制之goto
+                    case CodeEx.Br:
+                        stack.Br(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Br_S:
+                        stack.Br(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Brtrue:
+                        stack.Brtrue(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Brtrue_S:
+                        stack.Brtrue(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Brfalse:
+                        stack.Brfalse(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Brfalse_S:
+                        stack.Brfalse(_code.tokenAddr_Index);
+                        break;
+
+                    //比较流程控制
+                    case CodeEx.Beq:
+                        stack.Beq(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Beq_S:
+                        stack.Beq(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bne_Un:
+                        stack.Bne_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bne_Un_S:
+                        stack.Bne_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bge:
+                        stack.Bge(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bge_S:
+                        stack.Bge(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bge_Un:
+                        stack.Bge_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bge_Un_S:
+                        stack.Bge_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bgt:
+                        stack.Bgt(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bgt_S:
+                        stack.Bgt(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bgt_Un:
+                        stack.Bgt_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Bgt_Un_S:
+                        stack.Bgt_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Ble:
+                        stack.Ble(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Ble_S:
+                        stack.Ble(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Ble_Un:
+                        stack.Ble_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Ble_Un_S:
+                        stack.Ble_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Blt:
+                        stack.Blt(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Blt_S:
+                        stack.Blt(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Blt_Un:
+                        stack.Blt_Un(_code.tokenAddr_Index);
+                        break;
+                    case CodeEx.Blt_Un_S:
+                        stack.Blt_Un(_code.tokenAddr_Index);
+                        break;
+                    //逻辑计算
+                    case CodeEx.Ceq:
+                        stack.Ceq();
+                        break;
+                    case CodeEx.Cgt:
+                        stack.Cgt();
+                        break;
+                    case CodeEx.Cgt_Un:
+                        stack.Cgt_Un();
+                        break;
+                    case CodeEx.Clt:
+                        stack.Clt();
+                        break;
+                    case CodeEx.Clt_Un:
+                        stack.Clt_Un();
+                        break;
+                    case CodeEx.Ckfinite:
+                        stack.Ckfinite();
+                        break;
+                    //常量加载
+                    case CodeEx.Ldc_I4:
+                        stack.Ldc_I4(_code.tokenI32);
+                        break;
+                    case CodeEx.Ldc_I4_S:
+                        stack.Ldc_I4(_code.tokenI32);
+                        break;
+                    case CodeEx.Ldc_I4_M1:
+                        stack.Ldc_I4(-1);
+                        break;
+                    case CodeEx.Ldc_I4_0:
+                        stack.Ldc_I4(0);
+                        break;
+                    case CodeEx.Ldc_I4_1:
+                        stack.Ldc_I4(1);
+                        break;
+                    case CodeEx.Ldc_I4_2:
+                        stack.Ldc_I4(2);
+                        break;
+                    case CodeEx.Ldc_I4_3:
+                        stack.Ldc_I4(3);
+                        break;
+                    case CodeEx.Ldc_I4_4:
+                        stack.Ldc_I4(4);
+                        break;
+                    case CodeEx.Ldc_I4_5:
+                        stack.Ldc_I4(5);
+                        break;
+                    case CodeEx.Ldc_I4_6:
+                        stack.Ldc_I4(6);
+                        break;
+                    case CodeEx.Ldc_I4_7:
+                        stack.Ldc_I4(7);
+                        break;
+                    case CodeEx.Ldc_I4_8:
+                        stack.Ldc_I4(8);
+                        break;
+                    case CodeEx.Ldc_I8:
+                        stack.Ldc_I8(_code.tokenI64);
+                        break;
+                    case CodeEx.Ldc_R4:
+                        stack.Ldc_R4(_code.tokenR32);
+                        break;
+                    case CodeEx.Ldc_R8:
+                        stack.Ldc_R8(_code.tokenR64);
+                        break;
+
+                    //定义为临时变量
+                    case CodeEx.Stloc:
+                        stack.Stloc(_code.tokenI32);
+                        break;
+                    case CodeEx.Stloc_S:
+                        stack.Stloc(_code.tokenI32);
+                        break;
+                    case CodeEx.Stloc_0:
+                        stack.Stloc(0);
+                        break;
+                    case CodeEx.Stloc_1:
+                        stack.Stloc(1);
+                        break;
+                    case CodeEx.Stloc_2:
+                        stack.Stloc(2);
+                        break;
+                    case CodeEx.Stloc_3:
+                        stack.Stloc(3);
+                        break;
+                    //从临时变量加载
+                    case CodeEx.Ldloc:
+                        stack.Ldloc(_code.tokenI32);
+                        break;
+                    case CodeEx.Ldloc_S:
+                        stack.Ldloc(_code.tokenI32);
+                        break;
+                    case CodeEx.Ldloc_0:
+                        stack.Ldloc(0);
+                        break;
+                    case CodeEx.Ldloc_1:
+                        stack.Ldloc(1);
+                        break;
+                    case CodeEx.Ldloc_2:
+                        stack.Ldloc(2);
+                        break;
+                    case CodeEx.Ldloc_3:
+                        stack.Ldloc(3);
+                        break;
+                    case CodeEx.Ldloca:
+                        stack.Ldloca(_code.tokenI32);
+                        break;
+                    case CodeEx.Ldloca_S:
+                        stack.Ldloca(_code.tokenI32);
+                        break;
+                    //加载字符串
+                    case CodeEx.Ldstr:
+                        stack.Ldstr(_code.tokenStr);
+                        break;
+                    //呼叫函数
+                    case CodeEx.Call:
+                        stack.Call(this, _code.tokenMethod, false);
+                        break;
+                    case CodeEx.Callvirt:
+                        stack.Call(this, _code.tokenMethod, true);
+                        break;
+                    //算术指令
+                    case CodeEx.Add:
+                        stack.Add();
+                        break;
+                    case CodeEx.Sub:
+                        stack.Sub();
+                        break;
+                    case CodeEx.Mul:
+                        stack.Mul();
+                        break;
+                    case CodeEx.Div:
+                        stack.Div();
+                        break;
+                    case CodeEx.Div_Un:
+                        stack.Div_Un();
+                        break;
+                    case CodeEx.Rem:
+                        stack.Rem();
+                        break;
+                    case CodeEx.Rem_Un:
+                        stack.Rem_Un();
+                        break;
+                    case CodeEx.Neg:
+                        stack.Neg();
+                        break;
+
+                    //装箱
+                    case CodeEx.Box:
+                        stack.Box(_code.tokenType);
+                        break;
+                    case CodeEx.Unbox:
+                        stack.Unbox();
+                        break;
+                    case CodeEx.Unbox_Any:
+                        stack.Unbox_Any();
+                        break;
+
+                    //加载参数
+                    case CodeEx.Ldarg:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Ldarg(_code.tokenI32);
+                        else
+                            stack.Ldarg(_code.tokenI32 + 1);
+
+                        break;
+                    case CodeEx.Ldarg_S:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Ldarg(_code.tokenI32);
+                        else
+                            stack.Ldarg(_code.tokenI32 + 1);
+                        break;
+                    case CodeEx.Ldarg_0:
+                        stack.Ldarg(0);
+                        break;
+                    case CodeEx.Ldarg_1:
+                        stack.Ldarg(1);
+                        break;
+                    case CodeEx.Ldarg_2:
+                        stack.Ldarg(2);
+                        break;
+                    case CodeEx.Ldarg_3:
+                        stack.Ldarg(3);
+                        break;
+                    case CodeEx.Ldarga:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Ldarga(_code.tokenI32);
+                        else
+                            stack.Ldarga(_code.tokenI32 + 1);
+
+                        break;
+                    case CodeEx.Ldarga_S:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Ldarga(_code.tokenI32);
+                        else
+                            stack.Ldarga(_code.tokenI32 + 1);
+
+                        break;
+                    //转换
+                    case CodeEx.Conv_I1:
+                        stack.Conv_I1();
+                        break;
+                    case CodeEx.Conv_U1:
+                        stack.Conv_U1();
+                        break;
+                    case CodeEx.Conv_I2:
+                        stack.Conv_I2();
+                        break;
+                    case CodeEx.Conv_U2:
+                        stack.Conv_U2();
+                        break;
+                    case CodeEx.Conv_I4:
+                        stack.Conv_I4();
+                        break;
+                    case CodeEx.Conv_U4:
+                        stack.Conv_U4();
+                        break;
+                    case CodeEx.Conv_I8:
+                        stack.Conv_I8();
+                        break;
+                    case CodeEx.Conv_U8:
+                        stack.Conv_U8();
+                        break;
+                    case CodeEx.Conv_I:
+                        stack.Conv_I();
+                        break;
+                    case CodeEx.Conv_U:
+                        stack.Conv_U();
+                        break;
+                    case CodeEx.Conv_R4:
+                        stack.Conv_R4();
+                        break;
+                    case CodeEx.Conv_R8:
+                        stack.Conv_R8();
+                        break;
+                    case CodeEx.Conv_R_Un:
+                        stack.Conv_R_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_I1:
+                        stack.Conv_Ovf_I1();
+                        break;
+                    case CodeEx.Conv_Ovf_U1:
+                        stack.Conv_Ovf_U1();
+                        break;
+                    case CodeEx.Conv_Ovf_I2:
+                        stack.Conv_Ovf_I2();
+                        break;
+                    case CodeEx.Conv_Ovf_U2:
+                        stack.Conv_Ovf_U2();
+                        break;
+                    case CodeEx.Conv_Ovf_I4:
+                        stack.Conv_Ovf_I4();
+                        break;
+                    case CodeEx.Conv_Ovf_U4:
+                        stack.Conv_Ovf_U4();
+                        break;
+
+                    case CodeEx.Conv_Ovf_I8:
+                        stack.Conv_Ovf_I8();
+                        break;
+                    case CodeEx.Conv_Ovf_U8:
+                        stack.Conv_Ovf_U8();
+                        break;
+                    case CodeEx.Conv_Ovf_I:
+                        stack.Conv_Ovf_I();
+                        break;
+                    case CodeEx.Conv_Ovf_U:
+                        stack.Conv_Ovf_U();
+                        break;
+                    case CodeEx.Conv_Ovf_I1_Un:
+                        stack.Conv_Ovf_I1_Un();
+                        break;
+
+                    case CodeEx.Conv_Ovf_U1_Un:
+                        stack.Conv_Ovf_U1_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_I2_Un:
+                        stack.Conv_Ovf_I2_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_U2_Un:
+                        stack.Conv_Ovf_U2_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_I4_Un:
+                        stack.Conv_Ovf_I4_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_U4_Un:
+                        stack.Conv_Ovf_U4_Un();
+                        break;
+
+                    case CodeEx.Conv_Ovf_I8_Un:
+                        stack.Conv_Ovf_I8_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_U8_Un:
+                        stack.Conv_Ovf_U8_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_I_Un:
+                        stack.Conv_Ovf_I_Un();
+                        break;
+                    case CodeEx.Conv_Ovf_U_Un:
+                        stack.Conv_Ovf_U_Un();
+                        break;
+                    //数组
+                    case CodeEx.Newarr:
+                        stack.NewArr(this, _code.tokenType.TypeForSystem);
+                        break;
+                    case CodeEx.Ldlen:
+                        stack.LdLen();
+                        break;
+                    case CodeEx.Ldelema:
+                        stack.Ldelema(_code.tokenUnknown);
+                        break;
+                    case CodeEx.Ldelem_I1:
+                        stack.Ldelem_I1();
+                        break;
+                    case CodeEx.Ldelem_U1:
+                        stack.Ldelem_U1();
+                        break;
+                    case CodeEx.Ldelem_I2:
+                        stack.Ldelem_I2();
+                        break;
+                    case CodeEx.Ldelem_U2:
+                        stack.Ldelem_U2();
+                        break;
+                    case CodeEx.Ldelem_I4:
+                        stack.Ldelem_I4();
+                        break;
+                    case CodeEx.Ldelem_U4:
+                        stack.Ldelem_U4();
+                        break;
+                    case CodeEx.Ldelem_I8:
+                        stack.Ldelem_I8();
+                        break;
+                    case CodeEx.Ldelem_I:
+                        stack.Ldelem_I();
+                        break;
+                    case CodeEx.Ldelem_R4:
+                        stack.Ldelem_R4();
+                        break;
+                    case CodeEx.Ldelem_R8:
+                        stack.Ldelem_R8();
+                        break;
+                    case CodeEx.Ldelem_Ref:
+                        stack.Ldelem_Ref();
+                        break;
+                    case CodeEx.Ldelem_Any:
+                        stack.Ldelem_Any(_code.tokenUnknown);
+                        break;
+
+                    case CodeEx.Stelem_I:
+                        stack.Stelem_I();
+                        break;
+                    case CodeEx.Stelem_I1:
+                        stack.Stelem_I1();
+                        break;
+                    case CodeEx.Stelem_I2:
+                        stack.Stelem_I2();
+                        break;
+                    case CodeEx.Stelem_I4:
+                        stack.Stelem_I4();
+                        break;
+                    case CodeEx.Stelem_I8:
+                        stack.Stelem_I8();
+                        break;
+                    case CodeEx.Stelem_R4:
+                        stack.Stelem_R4();
+                        break;
+                    case CodeEx.Stelem_R8:
+                        stack.Stelem_R8();
+                        break;
+                    case CodeEx.Stelem_Ref:
+                        stack.Stelem_Ref();
+                        break;
+                    case CodeEx.Stelem_Any:
+                        stack.Stelem_Any();
+                        break;
+
+                    case CodeEx.Newobj:
+                        stack.NewObj(this, _code.tokenMethod);
+                        break;
+
+                    case CodeEx.Dup:
+                        stack.Dup();
+                        break;
+                    case CodeEx.Pop:
+                        stack.Pop();
+                        break;
+
+                    case CodeEx.Ldfld:
+                        stack.Ldfld(this, _code.tokenField);
+                        break;
+                    case CodeEx.Ldflda:
+                        stack.Ldflda(this, _code.tokenField);
+                        break;
+                    case CodeEx.Ldsfld:
+                        stack.Ldsfld(this, _code.tokenField);
+                        break;
+                    case CodeEx.Ldsflda:
+                        stack.Ldsflda(this, _code.tokenField);
+                        break;
+                    case CodeEx.Stfld:
+                        stack.Stfld(this, _code.tokenField);
+                        break;
+                    case CodeEx.Stsfld:
+                        stack.Stsfld(this, _code.tokenField);
+                        break;
+
+
+                    case CodeEx.Constrained:
+                        stack.Constrained(this, _code.tokenType);
+                        break;
+
+                    case CodeEx.Isinst:
+                        stack.Isinst(this, _code.tokenType);
+                        break;
+                    case CodeEx.Ldtoken:
+                        stack.Ldtoken(this, GetToken(_code.tokenUnknown));
+                        break;
+
+                    case CodeEx.Ldftn:
+                        stack.Ldftn(this, _code.tokenMethod);
+                        break;
+                    case CodeEx.Ldvirtftn:
+                        stack.Ldvirtftn(this, _code.tokenMethod);
+                        break;
+
+                    case CodeEx.Calli:
+                        stack.Calli(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Starg_S:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Starg(this, _code.tokenI32);
+                        else
+                            stack.Starg(this, _code.tokenI32 + 1);
+                        break;
+                    case CodeEx.Starg:
+                        if (body.bodyNative.Method.IsStatic)
+                            stack.Starg(this, _code.tokenI32);
+                        else
+                            stack.Starg(this, _code.tokenI32 + 1);
+                        break;
+                    case CodeEx.Volatile:
+                        stack.Volatile();
+                        break;
+                    ///下面是还没有处理的指令
+                    case CodeEx.Break:
+                        stack.Break(this, _code.tokenUnknown);
+                        break;
+
+                    case CodeEx.Ldnull:
+                        stack.Ldnull();
+                        break;
+                    case CodeEx.Jmp:
+                        stack.Jmp(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Switch:
+                        stack.Switch(this, _code.tokenAddr_Switch);
+                        break;
+                    case CodeEx.Ldind_I1:
+                        stack.Ldind_I1();
+                        break;
+                    case CodeEx.Ldind_U1:
+                        stack.Ldind_U1();
+                        break;
+                    case CodeEx.Ldind_I2:
+                        stack.Ldind_I2();
+                        break;
+                    case CodeEx.Ldind_U2:
+                        stack.Ldind_U2();
+                        break;
+                    case CodeEx.Ldind_I4:
+                        stack.Ldind_I4();
+                        break;
+                    case CodeEx.Ldind_U4:
+                        stack.Ldind_U4();
+                        break;
+                    case CodeEx.Ldind_I8:
+                        stack.Ldind_I8();
+                        break;
+                    case CodeEx.Ldind_I:
+                        stack.Ldind_I();
+                        break;
+                    case CodeEx.Ldind_R4:
+                        stack.Ldind_R4();
+                        break;
+                    case CodeEx.Ldind_R8:
+                        stack.Ldind_R8();
+                        break;
+                    case CodeEx.Ldind_Ref:
+                        stack.Ldind_Ref();
+                        break;
+                    case CodeEx.Stind_Ref:
+                        stack.Stind_Ref(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_I1:
+                        stack.Stind_I1(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_I2:
+                        stack.Stind_I2(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_I4:
+                        stack.Stind_I4(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_I8:
+                        stack.Stind_I8(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_R4:
+                        stack.Stind_R4(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_R8:
+                        stack.Stind_R8(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.And:
+                        stack.And();
+                        break;
+                    case CodeEx.Or:
+                        stack.Or();
+                        break;
+                    case CodeEx.Xor:
+                        stack.Xor();
+                        break;
+                    case CodeEx.Shl:
+                        stack.Shl(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Shr:
+                        stack.Shr(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Shr_Un:
+                        stack.Shr_Un(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Not:
+                        stack.Not();
+                        break;
+                    case CodeEx.Cpobj:
+                        stack.Cpobj(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Ldobj:
+                        stack.Ldobj(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Castclass:
+                        stack.Castclass(this, _code.tokenType);
+                        break;
+                    case CodeEx.Throw:
+                        stack.Throw(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stobj:
+                        stack.Stobj(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Refanyval:
+                        stack.Refanyval(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Mkrefany:
+                        stack.Mkrefany(this, _code.tokenUnknown);
+                        break;
+
+                    case CodeEx.Add_Ovf:
+                        stack.Add_Ovf(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Add_Ovf_Un:
+                        stack.Add_Ovf_Un(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Mul_Ovf:
+                        stack.Mul_Ovf(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Mul_Ovf_Un:
+                        stack.Mul_Ovf_Un(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Sub_Ovf:
+                        stack.Sub_Ovf(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Sub_Ovf_Un:
+                        stack.Sub_Ovf_Un(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Endfinally:
+                        stack.Endfinally(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Stind_I:
+                        stack.Stind_I(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Arglist:
+                        stack.Arglist(this, _code.tokenUnknown);
+                        break;
+
+
+                    case CodeEx.Localloc:
+                        stack.Localloc(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Endfilter:
+                        stack.Endfilter(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Unaligned:
+                        stack.Unaligned(this, _code.tokenUnknown);
+                        break;
+
+                    case CodeEx.Tail:
+                        stack.Tail(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Initobj:
+                        stack.Initobj(this, _code.tokenType);
+                        break;
+                    case CodeEx.Cpblk:
+                        stack.Cpblk(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Initblk:
+                        stack.Initblk(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.No:
+                        stack.No(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Rethrow:
+                        stack.Rethrow(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Sizeof:
+                        stack.Sizeof(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Refanytype:
+                        stack.Refanytype(this, _code.tokenUnknown);
+                        break;
+                    case CodeEx.Readonly:
+                        stack.Readonly(this, _code.tokenUnknown);
+                        break;
+                    default:
+                        throw new Exception("未实现的OpCode:" + _code.code);
+                }
+            }
+
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Execute/Context.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/Context.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 1ad2b77eb562cc54ca2f9ce00260d012
+guid: fc17fbf613d7be4429c33b6fc1f502c6
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 3219 - 2273
Unity/Assets/Plugins/CLRSharp/Execute/StackFrame.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/StackFrame.cs

@@ -1,2273 +1,3219 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public class RefFunc
-    {
-        public IMethod _method;
-        public object _this;
-        public RefFunc(IMethod _method, object _this)
-        {
-            this._method = _method;
-            this._this = _this;
-        }
-    }
-    /// <summary>
-    /// 堆栈帧
-    /// 一个堆栈帧,包含一个计算栈,一个临时变量槽,一个参数槽
-    /// 模拟虚拟机上的堆栈帧
-    /// </summary>
-    public class StackFrame
-    {
-        public string Name
-        {
-            get;
-            private set;
-        }
-        public bool IsStatic
-        {
-            get;
-            private set;
-        }
-        public StackFrame(string name, bool isStatic)
-        {
-            this.Name = name;
-            this.IsStatic = IsStatic;
-        }
-        public Mono.Cecil.Cil.Instruction _pos = null;
-
-        public class MyCalcStack : Stack<object>
-        {
-            Queue<VBox> unused = new Queue<VBox>();
-            public void Push(VBox box)
-            {
-                if (box != null)
-                {
-                    box.refcount++;
-                    while (unused.Count > 0)
-                    {
-                        VBox b = unused.Dequeue();
-                        if (b.refcount == 0)
-                            ValueOnStack.UnUse(b);
-                    }
-                }
-                base.Push(box);
-            }
-            public new object Pop()
-            {
-                var ob = base.Pop();
-                VBox box = ob as VBox;
-                if (box != null)
-                {
-                    box.refcount--;
-                    if (box.refcount == 0)
-                        unused.Enqueue(box);
-                }
-                return ob;
-
-            }
-            public void ClearVBox()
-            {
-                while (unused.Count > 0)
-                {
-                    VBox b = unused.Dequeue();
-                    if (b.refcount == 0)
-                    {
-                        ValueOnStack.UnUse(b);
-                    }
-                    else
-                    {
-                        Console.WriteLine("not zero.");
-                    }
-                }
-                this.Clear();
-            }
-        }
-        public MyCalcStack stackCalc = new MyCalcStack();
-        public class MySlotVar : List<object>
-        {
-            public new void Add(object obj)
-            {
-                base.Add(obj);
-            }
-            public void Add(VBox box)
-            {
-                if (box != null)
-                {
-                    box.refcount++;
-                }
-                base.Add(box);
-            }
-            public void ClearVBox()
-            {
-                foreach (object b in this)
-                {
-                    VBox box = b as VBox;
-                    if (box != null)
-                    {
-                        box.refcount--;
-                        if (box.refcount == 0)
-                        {
-                            ValueOnStack.UnUse(box);
-                        }
-                        else
-                        {
-                            Console.WriteLine("not zero.");
-                        }
-                    }
-                }
-                this.Clear();
-            }
-        }
-        public MySlotVar slotVar = new MySlotVar();
-        public object[] _params = null;
-        public void SetParams(object[] _p)
-        {
-            _params = _p;
-        }
-        CodeBody _body = null;
-        public CodeBody codebody
-        {
-            get
-            {
-                return _body;
-            }
-        }
-        public void Init(CodeBody body)
-        {
-            _body = body;
-            if (body.typelistForLoc != null)
-            {
-                for (int i = 0; i < body.typelistForLoc.Count; i++)
-                {
-                    ICLRType t = _body.typelistForLoc[i];
-
-                    slotVar.Add(ValueOnStack.MakeVBox(t));
-                }
-            }
-        }
-        public object Return()
-        {
-
-            this.slotVar.ClearVBox();
-            if (this.stackCalc.Count == 0) return null;
-            object ret = stackCalc.Pop();
-            this.stackCalc.ClearVBox();
-
-            return ret;
-        }
-        //流程控制
-        public void Call(ThreadContext context, IMethod _clrmethod, bool bVisual)
-        {
-
-            if (_clrmethod == null)//不想被执行的函数
-            {
-                _pos = _pos.Next;
-                return;
-            }
-
-            object[] _pp = null;
-            object _this = null;
-
-            if (_clrmethod.ParamList != null)
-            {
-                _pp = new object[_clrmethod.ParamList.Count];
-                for (int i = 0; i < _pp.Length; i++)
-                {
-                    var pp = stackCalc.Pop();
-                    if (pp is CLRSharp_Instance&&_clrmethod.ParamList[i].TypeForSystem!=typeof(CLRSharp_Instance))
-                    {
-                        var inst =pp as CLRSharp_Instance;
-
-                        var btype = inst.type.ContainBase(_clrmethod.ParamList[i].TypeForSystem);
-                        if (btype)
-                        {
-                            var CrossBind = context.environment.GetCrossBind(_clrmethod.ParamList[i].TypeForSystem);
-                            if (CrossBind != null)
-                            {
-                                pp = CrossBind.CreateBind(inst);
-                            }
-                            else
-                            {
-                                pp = (_this as CLRSharp_Instance).system_base;
-                                //如果没有绑定器,尝试直接使用System_base;
-                            }
-                            //context.environment.logger.Log("这里有一个需要映射的类型");
-                        }
-
-                    }
-                    if (pp is VBox)
-                    {
-                        pp = (pp as VBox).BoxDefine();
-                    }
-                    if ((pp is int) && (_clrmethod.ParamList[i].TypeForSystem != typeof(int) && _clrmethod.ParamList[i].TypeForSystem != typeof(object)))
-                    {
-                        var _vbox = ValueOnStack.MakeVBox(_clrmethod.ParamList[i]);
-                        if (_vbox != null)
-                        {
-                            _vbox.SetDirect(pp);
-                            pp = _vbox.BoxDefine();
-                        }
-                    }
-                    _pp[_pp.Length - 1 - i] = pp;
-                }
-            }
-
-
-            //if (method.HasThis)
-            if (!_clrmethod.isStatic)
-            {
-                _this = stackCalc.Pop();
-            }
-            if (_clrmethod.DeclaringType.FullName.Contains("System.Runtime.CompilerServices.RuntimeHelpers") && _clrmethod.Name.Contains("InitializeArray"))
-            {
-                _pos = _pos.Next;
-                return;
-            }
-            if (_clrmethod.DeclaringType.FullName.Contains("System.Type") && _clrmethod.Name.Contains("GetTypeFromHandle"))
-            {
-                stackCalc.Push(_pp[0]);
-                _pos = _pos.Next;
-                return;
-            }
-            if (_clrmethod.DeclaringType.FullName.Contains("System.Object") && _clrmethod.Name.Contains(".ctor"))
-            {//跳过这个没意义的构造
-                _pos = _pos.Next;
-                return;
-            }
-            if (_this is RefObj && _clrmethod.Name != ".ctor")
-            {
-                _this = (_this as RefObj).Get();
-
-            }
-            if (_this is VBox)
-            {
-                _this = (_this as VBox).BoxDefine();
-            }
-            bool bCross = (_this is CLRSharp_Instance && _clrmethod is IMethod_System);
-            object returnvar =  _clrmethod.Invoke(context, _this, _pp, bVisual);
-            if (bCross)
-            {
-                //这里究竟如何处理还需要再考虑
-                //returnvar = _clrmethod.Invoke(context, (_this as CLRSharp_Instance).system_base, _pp, bVisual);
-                if (_clrmethod.Name.Contains(".ctor"))
-                {
-                    (_this as CLRSharp_Instance).system_base = returnvar;
-                    returnvar = (_this);
-                }
-            }
-            else
-            {
-                //returnvar = _clrmethod.Invoke(context, _this, _pp, bVisual);
-            }
-
-
-            // bool breturn = false;
-            if (_clrmethod.ReturnType != null && _clrmethod.ReturnType.FullName != "System.Void")
-            {
-                if ((returnvar is VBox) == false)
-                {
-                    var type = ValueOnStack.MakeVBox(_clrmethod.ReturnType);
-                    if (type != null)
-                    {
-                        type.SetDirect(returnvar);
-                        returnvar = type;
-                    }
-                }
-                stackCalc.Push(returnvar);
-            }
-
-            else if (_this is RefObj && _clrmethod.Name == ".ctor")
-            {
-                //如果这里有发生程序类型,脚本类型的cross,就需要特别处理
-                (_this as RefObj).Set(returnvar);
-            }
-            _pos = _pos.Next;
-            return;
-
-        }
-        //栈操作
-        public void Nop()
-        {
-            _pos = _pos.Next;
-        }
-        public void Dup()
-        {
-            stackCalc.Push(stackCalc.Peek());
-            _pos = _pos.Next;
-        }
-        public void Pop()
-        {
-            stackCalc.Pop();
-            _pos = _pos.Next;
-        }
-        //流程控制
-        public void Ret()
-        {
-            _pos = _pos.Next;
-        }
-        public void Box(ICLRType type)
-        {
-            object obj = stackCalc.Pop();
-            VBox box = obj as VBox;
-            if (type.TypeForSystem.IsEnum)
-            {
-                int ev = 0;
-                if (box != null) ev = box.v32;
-                else ev = (int)obj;
-                obj = Enum.ToObject(type.TypeForSystem, ev);
-            }
-            else
-            {
-                if (box != null)
-                    obj = box.BoxDefine();
-            }
-            stackCalc.Push(obj);
-            _pos = _pos.Next;
-        }
-        public void Unbox()
-        {
-            object obj = stackCalc.Pop();
-            var box = ValueOnStack.MakeVBox(obj.GetType());
-            if (box != null)
-            {
-                box.SetDirect(obj);
-                stackCalc.Push(box);
-            }
-            else
-            {
-                stackCalc.Push(obj);
-            }
-            _pos = _pos.Next;
-        }
-        public void Unbox_Any()
-        {
-            _pos = _pos.Next;
-        }
-        public void Br(Mono.Cecil.Cil.Instruction pos)
-        {
-            _pos = pos;
-        }
-        public void Leave(Mono.Cecil.Cil.Instruction pos)
-        {
-            stackCalc.Clear();
-            _pos = pos;
-        }
-        public void Brtrue(Mono.Cecil.Cil.Instruction pos)
-        {
-            object obj = stackCalc.Pop();
-            bool b = false;
-            if (obj != null)
-            {
-                if (obj is VBox)
-                {
-                    VBox box = obj as VBox;
-                    b = box.ToBool();
-                }
-                else if (obj.GetType().IsClass)
-                {
-                    b = true;
-                }
-                else if (obj is bool)
-                {
-                    b = (bool)obj;
-                }
-                else
-                {
-                    b = Convert.ToDecimal(obj) > 0;
-                }
-            }
-            //decimal b = Convert.ToDecimal(stackCalc.Pop());
-            //bool b = (bool)stackCalc.Pop();
-            if (b)
-            {
-                _pos = pos;
-            }
-            else
-            {
-                _pos = _pos.Next;
-            }
-        }
-        public void Brfalse(Mono.Cecil.Cil.Instruction pos)
-        {
-            decimal b = Convert.ToDecimal(stackCalc.Pop());
-            if (b <= 0)
-            {
-                _pos = pos;
-            }
-            else
-            {
-                _pos = _pos.Next;
-            }
-        }
-        //条件跳转
-        public void Beq(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_eq(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bne(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_ne(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bne_Un(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_ne_Un(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bge(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_ge(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bge_Un(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_ge_Un(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bgt(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_gt(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Bgt_Un(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_gt_Un(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Ble(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_le(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Ble_Un(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_le_Un(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Blt(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_lt(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        public void Blt_Un(Mono.Cecil.Cil.Instruction pos)
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            if (n1.logic_lt_Un(n2))
-            {
-                _pos = _pos.Next;
-            }
-            else
-            {
-                _pos = pos;
-            }
-        }
-        //加载常量
-        public void Ldc_I4(int v)//int32
-        {
-            VBox box = ValueOnStack.MakeVBox(NumberType.INT32);
-            box.v32 = v;
-            stackCalc.Push(box);
-            _pos = _pos.Next;
-
-        }
-
-        public void Ldc_I8(Int64 v)//int64
-        {
-            VBox box = ValueOnStack.MakeVBox(NumberType.INT64);
-            box.v64 = v;
-            stackCalc.Push(box);
-            _pos = _pos.Next;
-        }
-        public void Ldc_R4(float v)
-        {
-            VBox box = ValueOnStack.MakeVBox(NumberType.FLOAT);
-            box.vDF = v;
-            stackCalc.Push(box);
-            _pos = _pos.Next;
-        }
-        public void Ldc_R8(double v)
-        {
-            VBox box = ValueOnStack.MakeVBox(NumberType.DOUBLE);
-            box.vDF = v;
-            stackCalc.Push(box);
-            _pos = _pos.Next;
-        }
-        //放进变量槽
-        public void Stloc(int pos)
-        {
-            object v = stackCalc.Pop();
-            while (slotVar.Count <= pos)
-            {
-                slotVar.Add(null);
-            }
-            VBox box = slotVar[pos] as VBox;
-            if (box == null)
-            {
-                slotVar[pos] = v;
-            }
-            else
-            {
-                if (v is VBox)
-                    box.Set(v as VBox);
-                else
-                    box.SetDirect(v);
-            }
-            _pos = _pos.Next;
-        }
-        //拿出变量槽
-        public void Ldloc(int pos)
-        {
-            var obj = slotVar[pos];
-            VBox b = obj as VBox;
-            if (b != null)
-            {
-                obj = b.Clone();
-            }
-            stackCalc.Push(obj);
-            _pos = _pos.Next;
-        }
-        public enum RefType
-        {
-            loc,//本地变量槽
-            arg,//参数槽
-            field//成员变量
-        }
-        public class RefObj
-        {
-            public StackFrame frame;
-            public int pos;
-            public RefType type;
-            //public ICLRType _clrtype;
-            public IField _field;
-            public object _this;
-            public RefObj(StackFrame frame, int pos, RefType type)
-            {
-                this.frame = frame;
-                this.pos = pos;
-                this.type = type;
-            }
-            public RefObj(IField field, object _this)
-            {
-                this.type = RefType.field;
-                //this._clrtype = type;
-                this._field = field;
-                this._this = _this;
-            }
-
-            public void Set(object obj)
-            {
-                if (type == RefType.arg)
-                {
-                    frame._params[pos] = obj;
-                }
-                else if (type == RefType.loc)
-                {
-                    while (frame.slotVar.Count <= pos)
-                    {
-                        frame.slotVar.Add(null);
-                    }
-                    frame.slotVar[pos] = obj;
-                }
-                else if (type == RefType.field)
-                {
-                    _field.Set(_this, obj);
-                }
-
-            }
-            public object Get()
-            {
-                if (type == RefType.arg)
-                {
-                    return frame._params[pos];
-                }
-                else if (type == RefType.loc)
-                {
-                    while (frame.slotVar.Count <= pos)
-                    {
-                        frame.slotVar.Add(null);
-                    }
-                    return frame.slotVar[pos];
-                }
-                else if (type == RefType.field)
-                {
-                    return _field.Get(_this);
-                }
-                return null;
-            }
-
-        }
-
-        //拿出变量槽的引用
-
-        public void Ldloca(int pos)
-        {
-            stackCalc.Push(new RefObj(this, pos, RefType.loc));
-            _pos = _pos.Next;
-        }
-
-        public void Ldstr(string text)
-        {
-            stackCalc.Push(text);
-            _pos = _pos.Next;
-        }
-
-        //加载参数(还得处理static,il静态非静态不一样,成员参数0是this)
-        public void Ldarg(int pos)
-        {
-            object p = null;
-            if (_params != null)
-                p = _params[pos];
-            stackCalc.Push(p);
-            _pos = _pos.Next;
-        }
-        public void Ldarga(int pos)
-        {
-            stackCalc.Push(new RefObj(this, pos, RefType.arg));
-            _pos = _pos.Next;
-        }
-        //逻辑计算
-
-        public void Ceq()
-        {
-            var obj2 = stackCalc.Pop();
-            var obj1 = stackCalc.Pop();
-            VBox n2 = obj2 as VBox;
-            VBox n1 = obj1 as VBox;
-            bool beq = false;
-            if (n1 == null || n2 == null)
-            //if (obj1 == null || obj2 == null)
-            {
-                if (obj1 != null)
-                    beq = obj1.Equals(obj2);
-                else
-                    beq = (obj1 == obj2);
-            }
-            else
-            {
-                beq = n1.logic_eq(n2);
-            }
-
-
-
-            stackCalc.Push(ValueOnStack.MakeVBoxBool(beq));
-            _pos = _pos.Next;
-        }
-        public void Cgt()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-
-            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_gt(n2)));
-            _pos = _pos.Next;
-        }
-        public void Cgt_Un()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-
-            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_gt_Un(n2)));
-            _pos = _pos.Next;
-        }
-        public void Clt()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_lt(n2)));
-            _pos = _pos.Next;
-        }
-        public void Clt_Un()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_lt_Un(n2)));
-            _pos = _pos.Next;
-        }
-        public void Ckfinite()
-        {
-            object n1 = stackCalc.Pop();
-            if (n1 is float)
-            {
-                float v = (float)n1;
-                stackCalc.Push(float.IsInfinity(v) || float.IsNaN(v) ? 1 : 0);
-            }
-            else
-            {
-                double v = (double)n1;
-                stackCalc.Push(double.IsInfinity(v) || double.IsNaN(v) ? 1 : 0);
-            }
-            _pos = _pos.Next;
-        }
-        //算术操作
-        public void Add()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Add(n2);
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Sub()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Sub(n2);
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Mul()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Mul(n2);
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Div()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Div(n2);
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Div_Un()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Div(n2);//!!! _un
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Rem()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Mod(n2);
-            stackCalc.Push(n1);
-            _pos = _pos.Next; ;
-        }
-        public void Rem_Un()
-        {
-            VBox n2 = stackCalc.Pop() as VBox;
-            VBox n1 = stackCalc.Pop() as VBox;
-            n1.Mod(n2);//!!!_un
-            stackCalc.Push(n1);
-            _pos = _pos.Next;
-        }
-        public void Neg()
-        {
-
-            object n1 = stackCalc.Pop();
-            if (n1 is int)
-            {
-                stackCalc.Push(~(int)n1);
-            }
-            else if (n1 is Int64)
-            {
-                stackCalc.Push(~(Int64)n1);
-            }
-            else
-            {
-                stackCalc.Push(n1);
-            }
-
-            _pos = _pos.Next;
-        }
-        //转换
-        public void Conv_I1()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.SBYTE));
-            }
-            else
-            {
-                stackCalc.Push((sbyte)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_U1()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.BYTE));
-            }
-            else
-            {
-                stackCalc.Push((byte)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_I2()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT16));
-            }
-            else
-            {
-                stackCalc.Push((Int16)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_U2()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT16));
-            }
-            else
-            {
-                stackCalc.Push((UInt16)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_I4()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
-            }
-            else
-            {
-                stackCalc.Push((Int32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_U4()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
-            }
-            else
-            {
-                stackCalc.Push((UInt32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_I8()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT64));
-            }
-            else
-            {
-                stackCalc.Push((Int64)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_U8()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT64));
-            }
-            else
-            {
-                stackCalc.Push((UInt64)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_I()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
-            }
-            else
-            {
-                stackCalc.Push((Int32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_U()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
-            }
-            else
-            {
-                stackCalc.Push((UInt32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_R4()
-        {
-
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.FLOAT));
-            }
-            else
-            {
-                stackCalc.Push((float)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_R8()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.DOUBLE));
-            }
-            else
-            {
-                stackCalc.Push((double)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_R_Un()
-        {
-
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.FLOAT));
-            }
-            else
-            {
-                stackCalc.Push((float)num1);
-            }
-            _pos = _pos.Next;
-        }
-
-        ////数组
-        public void NewArr(ThreadContext context, IMethod newForArray)
-        {
-            //string typename = type.FullName + "[]";
-            //var _type = context.environment.GetType(typename, type.Module);
-            //MethodParamList tlist = MethodParamList.MakeList_OneParam_Int(context.environment);
-            //var m = _type.GetMethod(".ctor", tlist);
-            var objv = stackCalc.Pop();
-            if (objv is VBox) objv = (objv as VBox).BoxDefine();
-            var array = newForArray.Invoke(context, null, new object[] { objv });
-            stackCalc.Push(array);
-            _pos = _pos.Next;
-        }
-        public void LdLen()
-        {
-            var obj = stackCalc.Pop();
-            Array a = obj as Array;
-            var vbox = ValueOnStack.MakeVBox(NumberType.INT32);
-            vbox.v32 = a.Length;
-            stackCalc.Push(vbox);
-            _pos = _pos.Next;
-        }
-        public void Ldelema(object obj)
-        {
-            throw new NotImplementedException();
-            //_pos = _pos.Next;
-        }
-        public void Ldelem_I1()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_U1()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-
-        public void Ldelem_I2()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_U2()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_I4()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_U4()
-        {
-            int index = (int)stackCalc.Pop();
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-
-        public void Ldelem_I8()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_I()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_R4()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_R8()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_Ref()
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Array array = stackCalc.Pop() as Array;
-            stackCalc.Push(array.GetValue(index));
-            _pos = _pos.Next;
-        }
-        public void Ldelem_Any(object obj)
-        {
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            Object[] array = stackCalc.Pop() as Object[];
-            stackCalc.Push(array[index]);
-            _pos = _pos.Next;
-        }
-        public void Stelem_I()
-        {
-            var obj = stackCalc.Pop();
-            int value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToInt();
-            }
-            else
-            {
-                value = (Int32)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as Int32[];
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_I1()
-        {
-            var obj = stackCalc.Pop();
-            int value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToInt();
-            }
-            else
-            {
-                value = (sbyte)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as sbyte[];
-            array[index] = (sbyte)value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_I2()
-        {
-            var obj = stackCalc.Pop();
-            int value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToInt();
-            }
-            else
-            {
-                value = (Int16)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop();
-            if (array is char[])
-            {
-                (array as char[])[index] = (char)value;
-            }
-            else if (array is Int16[])
-            {
-                (array as Int16[])[index] = (Int16)value;
-            }
-
-            _pos = _pos.Next;
-        }
-        public void Stelem_I4()
-        {
-            var obj = stackCalc.Pop();
-            int value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToInt();
-            }
-            else
-            {
-                value = (Int32)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as Int32[];
-            array[index] = (Int32)value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_I8()
-        {
-            var obj = stackCalc.Pop();
-            long value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToInt64();
-            }
-            else
-            {
-                value = (Int64)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as Int64[];
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_R4()
-        {
-            var obj = stackCalc.Pop();
-            float value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToFloat();
-            }
-            else
-            {
-                value = (float)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as float[];
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_R8()
-        {
-            var obj = stackCalc.Pop();
-            double value = 0;
-            if (obj is VBox)
-            {
-                value = (obj as VBox).ToDouble();
-            }
-            else
-            {
-                value = (double)obj;
-            }
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as double[];
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-        public void Stelem_Ref()
-        {
-            var value = stackCalc.Pop();
-            var indexobj = stackCalc.Pop();
-            int index = 0;
-            if ((indexobj is VBox))
-            {
-                index = (indexobj as VBox).ToInt();
-            }
-            else
-            {
-                index = (int)indexobj;
-            }
-            var array = stackCalc.Pop() as Object[];
-
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-
-        public void Stelem_Any()
-        {
-            var value = stackCalc.Pop();
-            var index = (int)stackCalc.Pop();
-            var array = stackCalc.Pop() as Object[];
-            array[index] = value;
-            _pos = _pos.Next;
-        }
-
-        //寻址类
-        public void NewObj(ThreadContext context, IMethod _clrmethod)
-        {
-            //MethodParamList list = new MethodParamList(context.environment, method);
-            object[] _pp = null;
-            if (_clrmethod.ParamList != null && _clrmethod.ParamList.Count > 0)
-            {
-                _pp = new object[_clrmethod.ParamList.Count];
-                for (int i = 0; i < _pp.Length; i++)
-                {
-                    var obj = stackCalc.Pop();
-                    if (obj is VBox)
-                    {
-                        obj = (obj as VBox).BoxDefine();
-                    }
-                    _pp[_pp.Length - 1 - i] = obj;
-                }
-            }
-            //var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
-            object returnvar = _clrmethod.Invoke(context, null, _pp);
-
-            stackCalc.Push(returnvar);
-
-            _pos = _pos.Next;
-        }
-        //public void NewObj(ThreadContext context, Mono.Cecil.MethodReference method)
-        //{
-        //    object[] _pp = null;
-        //    if (method.Parameters.Count > 0)
-        //    {
-        //        _pp = new object[method.Parameters.Count];
-        //        for (int i = 0; i < _pp.Length; i++)
-        //        {
-        //            _pp[_pp.Length - 1 - i] = stackCalc.Pop();
-        //        }
-        //    }
-        //    var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
-
-        //    MethodParamList list = new MethodParamList(context.environment, method);
-
-        //    object returnvar = typesys.GetMethod(method.Name, list).Invoke(context, null, _pp);
-
-        //    stackCalc.Push(returnvar);
-
-
-
-
-        //    _pos = _pos.Next;
-
-        //}
-        public void Ldfld(ThreadContext context, IField field)
-        {
-            var obj = stackCalc.Pop();
-
-            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //ar ff = type.GetField(field.Name);
-            if (obj is RefObj)
-            {
-                obj = (obj as RefObj).Get();
-            }
-            var value = field.Get(obj);
-            VBox box = ValueOnStack.MakeVBox(field.FieldType);
-            if (box != null)
-            {
-                box.SetDirect(value);
-                value = box;
-            }
-            stackCalc.Push(value);
-            //System.Type t =obj.GetType();
-            _pos = _pos.Next;
-        }
-        public void Ldflda(ThreadContext context, IField field)
-        {
-            var obj = stackCalc.Pop();
-
-            // var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //var ff = type.GetField(field.Name);
-
-            stackCalc.Push(new RefObj(field, obj));
-
-            _pos = _pos.Next;
-        }
-        public void Ldsfld(ThreadContext context, IField field)
-        {
-            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //var ff = type.GetField(field.Name);
-            var value = field.Get(null);
-            VBox box = ValueOnStack.MakeVBox(field.FieldType);
-            if (box != null)
-            {
-                box.SetDirect(value);
-                value = box;
-            }
-            stackCalc.Push(value);
-            //System.Type t =obj.GetType();
-            _pos = _pos.Next;
-        }
-        public void Ldsflda(ThreadContext context, IField field)
-        {
-            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //var ff = type.GetField(field.Name);
-
-            stackCalc.Push(new RefObj(field, null));
-
-            _pos = _pos.Next;
-        }
-        public void Stfld(ThreadContext context, IField field)
-        {
-            var value = stackCalc.Pop();
-
-            var obj = stackCalc.Pop();
-            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //var ff = type.GetField(field.Name);
-            if (obj is RefObj)
-            {
-                var _this = (obj as RefObj).Get();
-                if (_this == null && !field.isStatic)
-                {
-                    (obj as RefObj).Set(field.DeclaringType.InitObj());
-                }
-                obj = (obj as RefObj).Get();
-            }
-            if (value is VBox)
-            {
-                value = (value as VBox).BoxDefine();
-            }
-            //else
-            {//某些类型需要转换。。。
-                VBox fbox = ValueOnStack.MakeVBox(field.FieldType);
-                if (fbox != null)
-                {
-                    fbox.SetDirect(value);
-                    value = fbox.BoxDefine();
-                }
-            }
-            field.Set(obj, value);
-            _pos = _pos.Next;
-        }
-        public void Stsfld(ThreadContext context, IField field)
-        {
-            var value = stackCalc.Pop();
-            //var obj = stackCalc.Pop();
-
-            if (value is VBox)
-            {
-                value = (value as VBox).BoxDefine();
-            }
-            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
-            //var ff = type.GetField(field.Name);
-            field.Set(null, value);
-
-            _pos = _pos.Next;
-        }
-        public void Constrained(ThreadContext context, ICLRType obj)
-        {
-
-            _pos = _pos.Next;
-        }
-        public void Isinst(ThreadContext context, ICLRType _type)
-        {
-            var value = stackCalc.Pop();
-            //var _type = context.environment.GetType(obj.FullName, obj.Module);
-            if (_type.IsInst(value))
-                stackCalc.Push(value);
-            else
-                stackCalc.Push(null);
-            _pos = _pos.Next;
-        }
-        public void Ldtoken(ThreadContext context, object token)
-        {
-            //string fname = obj.FullName;
-            //string tfname = obj.FieldType.FullName;
-            //var _type = context.environment.GetType(obj.DeclaringType.FullName, obj.Module);
-            //var field = _type.GetField(obj.Name);
-            stackCalc.Push(token);
-            _pos = _pos.Next;
-        }
-
-        public void Conv_Ovf_I1()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.SBYTE));
-            }
-            else
-            {
-                stackCalc.Push((sbyte)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_U1()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.BYTE));
-            }
-            else
-            {
-                stackCalc.Push((byte)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_I2()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT16));
-            }
-            else
-            {
-                stackCalc.Push((Int16)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_U2()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT16));
-            }
-            else
-            {
-                stackCalc.Push((Int16)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_I4()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
-            }
-            else
-            {
-                stackCalc.Push((Int32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_U4()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
-            }
-            else
-            {
-                stackCalc.Push((UInt32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_I8()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT64));
-            }
-            else
-            {
-                stackCalc.Push((Int64)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_U8()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT64));
-            }
-            else
-            {
-                stackCalc.Push((Int64)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_I()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
-            }
-            else
-            {
-                stackCalc.Push((Int32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_U()
-        {
-            object num1 = stackCalc.Pop();
-            VBox b = num1 as VBox;
-            if (b != null)
-            {
-                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
-            }
-            else
-            {
-                stackCalc.Push((UInt32)num1);
-            }
-            _pos = _pos.Next;
-        }
-        public void Conv_Ovf_I1_Un()
-        {
-            throw new NotImplementedException();
-        }
-
-        public void Conv_Ovf_U1_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_I2_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_U2_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_I4_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_U4_Un()
-        {
-            throw new NotImplementedException();
-        }
-
-        public void Conv_Ovf_I8_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_U8_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_I_Un()
-        {
-            throw new NotImplementedException();
-        }
-        public void Conv_Ovf_U_Un()
-        {
-            throw new NotImplementedException();
-        }
-
-        public void Ldftn(ThreadContext context, IMethod method)
-        {
-            stackCalc.Push(new RefFunc(method, null));
-            //throw new NotImplementedException();
-            _pos = _pos.Next;
-        }
-        public void Ldvirtftn(ThreadContext context, IMethod method)
-        {
-            object _this = stackCalc.Pop();
-            stackCalc.Push(new RefFunc(method, _this));
-
-            _pos = _pos.Next;
-        }
-        public void Ldarga(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Calli(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-
-
-        public void Break(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Starg_S(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldnull()
-        {
-            stackCalc.Push(null);
-            _pos = _pos.Next;
-        }
-        public void Jmp(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-
-        public void Switch(ThreadContext context, Mono.Cecil.Cil.Instruction[] poss)
-        {
-            var indexobj = stackCalc.Pop();
-            uint pos = 0;
-            if (indexobj is VBox)
-            {
-                pos = (indexobj as VBox).ToUInt();
-            }
-            else
-            {
-                pos = (uint)(int)indexobj;
-            }
-            if (pos >= poss.Length)
-            {
-                _pos = _pos.Next;
-
-            }
-            else
-            {
-                _pos = poss[pos];
-            }
-        }
-        public void Ldind_I1(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_U1(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_I2(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_U2(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_I4(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_U4(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_I8(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_I(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_R4(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_R8(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldind_Ref(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_Ref(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_I1(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_I2(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_I4(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_I8(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_R4(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_R8(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void And(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Or(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Xor(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Shl(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Shr(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Shr_Un(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Not(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Cpobj(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Ldobj(ThreadContext context, object obj)
-        {
-            stackCalc.Push(obj);
-            //Type t = obj.GetType();
-            //throw new NotImplementedException();
-            _pos = _pos.Next;
-        }
-        public void Castclass(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Throw(ThreadContext context, object obj)
-        {
-            Exception exc = stackCalc.Pop() as Exception;
-            throw exc;
-            //_pos = _pos.Next;
-        }
-        public void Stobj(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Refanyval(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Mkrefany(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-
-        public void Add_Ovf(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Add_Ovf_Un(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Mul_Ovf(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Mul_Ovf_Un(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Sub_Ovf(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Sub_Ovf_Un(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Endfinally(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Stind_I(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Arglist(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-
-        public void Starg(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Localloc(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Endfilter(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Unaligned(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Volatile(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Tail(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Initobj(ThreadContext context, ICLRType _type)
-        {
-            RefObj _this = stackCalc.Pop() as RefObj;
-
-            //var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
-            var _object = _type.InitObj();
-
-            _this.Set(_object);
-
-            _pos = _pos.Next;
-        }
-        public void Cpblk(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Initblk(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void No(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Rethrow(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Sizeof(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Refanytype(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-        public void Readonly(ThreadContext context, object obj)
-        {
-            Type t = obj.GetType();
-            throw new NotImplementedException(t.ToString());
-            //_pos = _pos.Next;
-        }
-    }
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public class RefFunc
+    {
+        public IMethod _method;
+        public object _this;
+        public RefFunc(IMethod _method, object _this)
+        {
+            this._method = _method;
+            this._this = _this;
+        }
+    }
+    /// <summary>
+    /// 堆栈帧
+    /// 一个堆栈帧,包含一个计算栈,一个临时变量槽,一个参数槽
+    /// 模拟虚拟机上的堆栈帧
+    /// </summary>
+    public class StackFrame
+    {
+        public string Name
+        {
+            get;
+            private set;
+        }
+        public bool IsStatic
+        {
+            get;
+            private set;
+        }
+        public StackFrame(string name, bool isStatic)
+        {
+            this.Name = name;
+            this.IsStatic = IsStatic;
+        }
+        Mono.Cecil.Cil.Instruction _posold;
+        public void SetCodePos(int offset)
+        {
+            _codepos = this._body.addr[offset];
+        }
+        public Mono.Cecil.Cil.Instruction GetCode()
+        {
+            if (_body == null) return null;
+            int nowaddr = this._body.opCodes[_codepos].addr;
+            foreach (var c in this._body.bodyNative.Instructions)
+            {
+                if (nowaddr == c.Offset)
+                    return c;
+            }
+            return null;
+        }
+        //public Mono.Cecil.Cil.Instruction _pos
+        //{
+        //    get
+        //    {
+        //        return _posold;
+        //    }
+        //    set
+        //    {
+        //        if (value == null)
+        //        {
+        //            _codepos = -1;
+        //        }
+        //        else
+        //        {
+        //            _codepos = _body.addr[value.Offset];
+        //        }
+        //        _posold = value;
+        //    }
+        //}
+        public int _codepos = 0;
+        public class MyCalcStack : Stack<object>
+        {
+            //Queue<VBox> unused = new Queue<VBox>();
+            public void Push(VBox box)
+            {
+                //if (box != null)
+                //{
+                //    box.refcount++;
+                //    while (unused.Count > 0)
+                //    {
+                //        VBox b = unused.Dequeue();
+                //        if (b.refcount == 0)
+                //            ValueOnStack.UnUse(b);
+                //    }
+                //}
+                base.Push(box);
+            }
+            public new object Pop()
+            {
+                var ob = base.Pop();
+                //VBox box = ob as VBox;
+                //if (box != null)
+                //{
+                //    box.refcount--;
+                //    if (box.refcount == 0)
+                //        unused.Enqueue(box);
+                //}
+                return ob;
+
+            }
+            public void ClearVBox()
+            {
+                //while (unused.Count > 0)
+                //{
+                //    VBox b = unused.Dequeue();
+                //    if (b.refcount == 0)
+                //    {
+                //        ValueOnStack.UnUse(b);
+                //    }
+                //    else
+                //    {
+                //        Console.WriteLine("not zero.");
+                //    }
+                //}
+                this.Clear();
+            }
+        }
+        public MyCalcStack stackCalc = new MyCalcStack();
+        public class MySlotVar : List<object>
+        {
+            public new void Add(object obj)
+            {
+                base.Add(obj);
+            }
+            public void Add(VBox box)
+            {
+                //if (box != null)
+                //{
+                //    box.refcount++;
+                //}
+                base.Add(box);
+            }
+            public void ClearVBox()
+            {
+                foreach (object b in this)
+                {
+                    VBox box = b as VBox;
+                    if (box != null)
+                    {
+                        ValueOnStack.UnUse(box);
+                    }
+                }
+                //        box.refcount--;
+                //        if (box.refcount == 0)
+                //        {
+                //            ValueOnStack.UnUse(box);
+                //        }
+                //        else
+                //        {
+                //            Console.WriteLine("not zero.");
+                //        }
+                //    }
+                //}
+                this.Clear();
+            }
+        }
+        public MySlotVar slotVar = new MySlotVar();
+        public object[] _params = null;
+        public void SetParams(object[] _p)
+        {
+            if (_p == null)
+            {
+                _params = null;
+                return;
+            }
+            _params = new object[_p.Length];
+            for (int i = 0; i < _p.Length; i++)
+            {
+                if (_p[i] != null)
+                {
+                    var vbox = ValueOnStack.MakeVBox(_p[i].GetType());
+                    if (vbox != null)
+                    {
+                        vbox.SetDirect(_p[i]);
+                        _params[i] = vbox;
+                        continue;
+                    }
+                }
+
+                _params[i] = _p[i];
+            }
+        }
+        CodeBody _body = null;
+        public CodeBody codebody
+        {
+            get
+            {
+                return _body;
+            }
+        }
+        public void Init(CodeBody body)
+        {
+            _body = body;
+            if (body.typelistForLoc != null)
+            {
+                for (int i = 0; i < body.typelistForLoc.Count; i++)
+                {
+                    ICLRType t = _body.typelistForLoc[i];
+
+                    slotVar.Add(ValueOnStack.MakeVBox(t));
+
+                }
+            }
+        }
+        public object Return()
+        {
+
+            this.slotVar.ClearVBox();
+            if (this.stackCalc.Count == 0) return null;
+            object ret = stackCalc.Pop();
+            this.stackCalc.ClearVBox();
+
+            return ret;
+        }
+        void FillArray(object array, byte[] bytes)
+        {
+            if (bytes == null)
+                return;
+            if (array is byte[])
+            {
+                byte[] arr = array as byte[];
+                for (int i = 0; i < bytes.Length; i++)
+                {
+                    arr[i] = bytes[i];
+                }
+            }
+            else if (array is sbyte[])
+            {
+                sbyte[] arr = array as sbyte[];
+                for (int i = 0; i < bytes.Length; i++)
+                {
+                    arr[i] = (sbyte)bytes[i];
+                }
+            }
+            else if (array is Int16[])
+            {
+                int step = 2;
+                Int16[] arr = array as Int16[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToInt16(bytes, i * step);
+                }
+            }
+            else if (array is UInt16[])
+            {
+                int step = 2;
+                UInt16[] arr = array as UInt16[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToUInt16(bytes, i * step);
+                }
+            }
+            else if (array is char[])
+            {
+                int step = 2;
+                char[] arr = array as char[];
+
+                for (int i = 0; i < Math.Min(bytes.Length / step, arr.Length); i++)
+                {
+                    arr[i] = (char)BitConverter.ToUInt16(bytes, i * step);
+                }
+            }
+            else if (array is int[])
+            {
+                int step = 4;
+                int[] arr = array as int[];
+
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToInt32(bytes, i * step);
+                }
+            }
+            else if (array is uint[])
+            {
+                int step = 4;
+                uint[] arr = array as uint[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToUInt32(bytes, i * step);
+                }
+            }
+            else if (array is Int64[])
+            {
+                int step = 8;
+                Int64[] arr = array as Int64[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToInt64(bytes, i * step);
+                }
+            }
+            else if (array is UInt64[])
+            {
+                int step = 8;
+                UInt64[] arr = array as UInt64[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToUInt64(bytes, i * step);
+                }
+            }
+            else if (array is float[])
+            {
+                int step = 4;
+                float[] arr = array as float[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToSingle(bytes, i * step);
+                }
+            }
+            else if (array is double[])
+            {
+                int step = 8;
+                double[] arr = array as double[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToDouble(bytes, i * step);
+                }
+            }
+            else if (array is bool[])
+            {
+                int step = 1;
+                bool[] arr = array as bool[];
+                for (int i = 0; i < bytes.Length / step; i++)
+                {
+                    arr[i] = BitConverter.ToBoolean(bytes, i * step);
+                }
+            }
+            else
+            {
+                throw new NotImplementedException("array=" + array.GetType());
+            }
+        }
+        //流程控制
+        public void Call(ThreadContext context, IMethod _clrmethod, bool bVisual)
+        {
+
+            if (_clrmethod == null)//不想被执行的函数
+            {
+                _codepos++;
+                return;
+            }
+
+            object[] _pp = null;
+            object _this = null;
+            bool bCLR = _clrmethod is IMethod_Sharp;
+            if (_clrmethod.ParamList != null)
+            {
+                _pp = new object[_clrmethod.ParamList.Count];
+                for (int i = 0; i < _pp.Length; i++)
+                {
+                    int iCallPPos = _pp.Length - 1 - i;
+                    ICLRType pType = _clrmethod.ParamList[iCallPPos];
+                    var pp = stackCalc.Pop();
+                    if (pp is CLRSharp_Instance && pType.TypeForSystem != typeof(CLRSharp_Instance))
+                    {
+                        var inst = pp as CLRSharp_Instance;
+
+                        var btype = inst.type.ContainBase(pType.TypeForSystem);
+                        if (btype)
+                        {
+                            var CrossBind = context.environment.GetCrossBind(pType.TypeForSystem);
+                            if (CrossBind != null)
+                            {
+                                pp = CrossBind.CreateBind(inst);
+                            }
+                            else
+                            {
+                                pp = inst.system_base;
+                                //如果没有绑定器,尝试直接使用System_base;
+                            }
+                            //context.environment.logger.Log("这里有一个需要映射的类型");
+                        }
+
+                    }
+                    if (pp is VBox && !bCLR)
+                    {
+                        ValueOnStack.UnUse(pp as VBox);
+                        pp = (pp as VBox).BoxDefine();
+                    }
+                    if (pp is ICLRType_System)
+                    {
+                        pp = (pp as ICLRType_System).TypeForSystem;
+                    }
+                    if ((pp is int) && (pType.TypeForSystem != typeof(int) && pType.TypeForSystem != typeof(object)))
+                    {
+                        var _vbox = ValueOnStack.MakeVBox(pType);
+                        if (_vbox != null)
+                        {
+                            _vbox.SetDirect(pp);
+                            if (bCLR)
+                                pp = _vbox;
+                            else
+                                pp = _vbox.BoxDefine();
+                        }
+                    }
+                    _pp[iCallPPos] = pp;
+                }
+            }
+
+
+            //if (method.HasThis)
+            if (!_clrmethod.isStatic)
+            {
+                _this = stackCalc.Pop();
+            }
+            if (_clrmethod.DeclaringType.FullName.Contains("System.Runtime.CompilerServices.RuntimeHelpers") && _clrmethod.Name.Contains("InitializeArray"))
+            {
+
+                byte[] bb = _pp[1] as byte[];
+                if (bb == null && _pp[1] is CLRSharp.Field_Common_CLRSharp)
+                {
+                    bb = (_pp[1] as CLRSharp.Field_Common_CLRSharp).field.InitialValue;
+                }
+                FillArray(_pp[0], bb);
+                _codepos++;
+                return;
+            }
+            if (_clrmethod.DeclaringType.FullName.Contains("System.Type") && _clrmethod.Name.Contains("GetTypeFromHandle"))
+            {
+                stackCalc.Push(_pp[0]);
+                _codepos++;
+                return;
+            }
+            if (_clrmethod.DeclaringType.FullName.Contains("System.Object") && _clrmethod.Name.Contains(".ctor"))
+            {//跳过这个没意义的构造
+                _codepos++;
+                return;
+            }
+            if (_this is RefObj && _clrmethod.Name != ".ctor")
+            {
+                _this = (_this as RefObj).Get();
+
+            }
+            if (_this is VBox)
+            {
+                //ValueOnStack.UnUse(_this as VBox);//放在这里会导致计算错误,原因待查
+
+                _this = (_this as VBox).BoxDefine();
+            }
+            bool bCross = (_this is CLRSharp_Instance && _clrmethod is IMethod_System);
+            object returnvar = _clrmethod.Invoke(context, _this, _pp, bVisual);
+
+            if(_this is VBox)
+            {
+                ValueOnStack.UnUse(_this as VBox);
+            }
+            if (bCross)
+            {
+                //这里究竟如何处理还需要再考虑
+                //returnvar = _clrmethod.Invoke(context, (_this as CLRSharp_Instance).system_base, _pp, bVisual);
+                if (_clrmethod.Name.Contains(".ctor"))
+                {
+                    (_this as CLRSharp_Instance).system_base = returnvar;
+                    returnvar = (_this);
+                }
+            }
+            else
+            {
+                //returnvar = _clrmethod.Invoke(context, _this, _pp, bVisual);
+            }
+
+
+            // bool breturn = false;
+            if (_clrmethod.ReturnType != null && _clrmethod.ReturnType.FullName != "System.Void")
+            {
+                if ((returnvar is VBox) == false)
+                {
+                    var type = ValueOnStack.MakeVBox(_clrmethod.ReturnType);
+                    if (type != null)
+                    {
+                        type.SetDirect(returnvar);
+                        returnvar = type;
+                    }
+                }
+                stackCalc.Push(returnvar);
+            }
+
+            else if (_this is RefObj && _clrmethod.Name == ".ctor")
+            {
+                //如果这里有发生程序类型,脚本类型的cross,就需要特别处理
+                (_this as RefObj).Set(returnvar);
+            }
+            _codepos++;
+            return;
+
+        }
+        //栈操作
+        public void Nop()
+        {
+            _codepos++;
+        }
+        public void Dup()
+        {
+            var v = stackCalc.Peek();
+            if (v is VBox)
+            {
+                v = (v as VBox).Clone();
+            }
+            stackCalc.Push(v);
+            _codepos++;
+        }
+        public void Pop()
+        {
+            var v = stackCalc.Pop() as VBox;
+            ValueOnStack.UnUse(v);
+            _codepos++;
+        }
+        //流程控制
+        public void Ret()
+        {
+            _codepos++;
+        }
+        public void Box(ICLRType type)
+        {
+            object obj = stackCalc.Pop();
+            VBox box = obj as VBox;
+            if (type.TypeForSystem.IsEnum)
+            {
+                int ev = 0;
+                if (box != null) ev = box.v32;
+                else ev = (int)obj;
+                obj = Enum.ToObject(type.TypeForSystem, ev);
+            }
+            else
+            {
+                if (box != null)
+                {
+                    var tcode = ValueOnStack.GetTypeCode(type.TypeForSystem);
+                    if (tcode == box.type)
+                    {
+
+
+                        obj = box.BoxDefine();
+                        ValueOnStack.UnUse(box);
+
+                    }
+                    else
+                    {
+                        var nbox = ValueOnStack.MakeVBox(tcode);
+                        nbox.Set(box);
+                        obj = nbox.BoxDefine();
+                        ValueOnStack.UnUse(nbox);
+                        ValueOnStack.UnUse(box);
+                    }
+                }
+            }
+            stackCalc.Push(obj);
+            _codepos++;
+        }
+        public void Unbox()
+        {
+            object obj = stackCalc.Pop();
+            var box = ValueOnStack.MakeVBox(obj.GetType());
+            if (box != null)
+            {
+                box.SetDirect(obj);
+                stackCalc.Push(box);
+            }
+            else
+            {
+                stackCalc.Push(obj);
+            }
+            _codepos++;
+        }
+        public void Unbox_Any()
+        {
+            object obj = stackCalc.Pop();
+            var box = ValueOnStack.MakeVBox(obj.GetType());
+            if (box != null)
+            {
+                box.SetDirect(obj);
+                stackCalc.Push(box);
+            }
+            else
+            {
+                stackCalc.Push(obj);
+            }
+
+            _codepos++;
+        }
+        public void Br(int addr_index)
+        {
+            _codepos = addr_index;// _body.addr[pos.Offset];
+        }
+        public void Leave(int addr_index)
+        {
+            stackCalc.Clear();
+            _codepos = addr_index;// _body.addr[addr];
+        }
+        //public void Leave_AddrIndex(int addr_index)
+        //{
+        //    stackCalc.Clear();
+        //    _codepos = addr_index;
+        //}
+        public void Brtrue(int addr_index)
+        {
+            object obj = stackCalc.Pop();
+            bool b = false;
+            if (obj != null)
+            {
+                if (obj is VBox)
+                {
+                    VBox box = obj as VBox;
+                    b = box.ToBool();
+                    ValueOnStack.UnUse(box);
+                }
+                else if (obj.GetType().IsClass)
+                {
+                    b = true;
+                }
+                else if (obj is bool)
+                {
+                    b = (bool)obj;
+                }
+                else
+                {
+                    b = Convert.ToDecimal(obj) > 0;
+                }
+            }
+            //decimal b = Convert.ToDecimal(stackCalc.Pop());
+            //bool b = (bool)stackCalc.Pop();
+            if (b)
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+            }
+            else
+            {
+                _codepos++;
+            }
+        }
+        public void Brfalse(int addr_index)
+        {
+            object obj = stackCalc.Pop();
+            bool b = false;
+            if (obj != null)
+            {
+                if (obj is VBox)
+                {
+                    VBox box = obj as VBox;
+                    b = box.ToBool();
+                    ValueOnStack.UnUse(box);
+                }
+                else if (obj.GetType().IsClass)
+                {
+                    b = true;
+                }
+                else if (obj is bool)
+                {
+                    b = (bool)obj;
+                }
+                else
+                {
+                    b = Convert.ToDecimal(obj) > 0;
+                }
+            }
+            if (!b)
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+            }
+            else
+            {
+                _codepos++;
+            }
+        }
+        //条件跳转
+        public void Beq(int addr_index)
+        {
+            object o2 = stackCalc.Pop();
+            object o1 = stackCalc.Pop();
+            if (o1 is VBox && o2 is VBox)
+            {
+                VBox n2 = o2 as VBox;
+                VBox n1 = o1 as VBox;
+
+                if (n1.logic_eq(n2))
+                {
+                    _codepos = addr_index;// _body.addr[pos.Offset];
+                }
+                else
+                {
+                    _codepos++;
+                }
+                ValueOnStack.UnUse(n1);
+                ValueOnStack.UnUse(n2);
+            }
+            else if (o1 is int)
+            {
+
+                int lv = (int)o1;
+                int rv = 0;
+                if (o2 is int)
+                    rv = (int)o2;
+                else if (o2 is VBox)
+                {
+                    rv = (o2 as VBox).v32;
+                    ValueOnStack.UnUse(o2 as VBox);
+
+                }
+                else
+                    throw new Exception("what a fuck");
+
+                if (lv == rv)
+                {
+                    _codepos = addr_index;// _body.addr[pos.Offset];
+                }
+                else
+                {
+                    _codepos++;
+                }
+            }
+            else
+            {
+                throw new Exception("what a fuck");
+            }
+
+        }
+        public void Bne(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_ne(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Bne_Un(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_ne_Un(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Bge(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_ge(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Bge_Un(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_ge_Un(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Bgt(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_gt(n2))
+            {
+                _codepos = addr_index;//_body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Bgt_Un(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_gt_Un(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Ble(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_le(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Ble_Un(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_le_Un(n2))
+            {
+                _codepos = addr_index;//_body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Blt(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_lt(n2))
+            {
+                _codepos = addr_index;//_body.addr[pos.Offset];
+
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Blt_Un(int addr_index)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+            if (n1.logic_lt_Un(n2))
+            {
+                _codepos = addr_index;// _body.addr[pos.Offset];
+            }
+            else
+            {
+                _codepos++;
+            }
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+
+        }
+        //加载常量
+        public void Ldc_I4(int v)//int32
+        {
+            VBox box = ValueOnStack.MakeVBox(NumberType.INT32);
+            box.v32 = v;
+            stackCalc.Push(box);
+            _codepos++;
+
+        }
+
+        public void Ldc_I8(Int64 v)//int64
+        {
+            VBox box = ValueOnStack.MakeVBox(NumberType.INT64);
+            box.v64 = v;
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldc_R4(float v)
+        {
+            VBox box = ValueOnStack.MakeVBox(NumberType.FLOAT);
+            box.vDF = v;
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldc_R8(double v)
+        {
+            VBox box = ValueOnStack.MakeVBox(NumberType.DOUBLE);
+            box.vDF = v;
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        //放进变量槽
+        public void Stloc(int pos)
+        {
+            object v = stackCalc.Pop();
+            while (slotVar.Count <= pos)
+            {
+                slotVar.Add(null);
+            }
+            if (v != null && v.GetType().IsValueType)
+            {
+                var mm = v.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
+                slotVar[pos] = mm.Invoke(v, null);
+            }
+            else
+            {
+                VBox box = slotVar[pos] as VBox;
+                if (box == null)
+                {
+                    slotVar[pos] = v;
+                }
+                else
+                {
+                    if (v is VBox)
+                    {
+                        box.Set(v as VBox);
+                    }
+                    else
+                        box.SetDirect(v);
+                }
+            }
+            if (v is VBox)
+            {
+                ValueOnStack.UnUse(v as VBox);
+            }
+            _codepos++;
+        }
+        //拿出变量槽
+        public void Ldloc(int pos)
+        {
+            var obj = slotVar[pos];
+            VBox b = obj as VBox;
+            if (b != null)
+            {
+                obj = b.Clone();
+            }
+            stackCalc.Push(obj);
+            _codepos++;
+        }
+        public enum RefType
+        {
+            loc,//本地变量槽
+            arg,//参数槽
+            field,//成员变量
+            Array,
+        }
+        public class RefObj
+        {
+            public StackFrame frame;
+            public int pos;
+            public RefType type;
+            //public ICLRType _clrtype;
+            public IField _field;
+            public object _this;
+            public Array _array;
+            public RefObj(StackFrame frame, int pos, RefType type)
+            {
+                this.frame = frame;
+                this.pos = pos;
+                this.type = type;
+            }
+            public RefObj(IField field, object _this)
+            {
+                this.type = RefType.field;
+                //this._clrtype = type;
+                this._field = field;
+                this._this = _this;
+            }
+            public RefObj(Array array, int index)
+            {
+                this.type = RefType.Array;
+                this._array = array;
+                this.pos = index;
+            }
+            public void Set(object obj)
+            {
+                if (type == RefType.arg)
+                {
+                    frame._params[pos] = obj;
+                }
+                else if (type == RefType.loc)
+                {
+                    while (frame.slotVar.Count <= pos)
+                    {
+                        frame.slotVar.Add(null);
+                    }
+                    frame.slotVar[pos] = obj;
+                }
+                else if (type == RefType.field)
+                {
+                    _field.Set(_this, obj);
+                }
+                else if (type == RefType.Array)
+                {
+                    _array.SetValue(obj, pos);
+                }
+
+            }
+            public object Get()
+            {
+                if (type == RefType.arg)
+                {
+                    return frame._params[pos];
+                }
+                else if (type == RefType.loc)
+                {
+                    while (frame.slotVar.Count <= pos)
+                    {
+                        frame.slotVar.Add(null);
+                    }
+                    return frame.slotVar[pos];
+                }
+                else if (type == RefType.field)
+                {
+                    return _field.Get(_this);
+                }
+                else if (type == RefType.Array)
+                {
+                    return _array.GetValue(pos);
+                }
+                return null;
+            }
+
+        }
+
+        //拿出变量槽的引用
+
+        public void Ldloca(int pos)
+        {
+            stackCalc.Push(new RefObj(this, pos, RefType.loc));
+            _codepos++;
+        }
+
+        public void Ldstr(string text)
+        {
+            stackCalc.Push(text);
+            _codepos++;
+        }
+
+        //加载参数(还得处理static,il静态非静态不一样,成员参数0是this)
+        public void Ldarg(int pos)
+        {
+            object obj = null;
+            if (_params != null)
+                obj = _params[pos];
+            VBox b = obj as VBox;
+            if (b != null)
+            {
+                obj = b.Clone();
+            }
+            stackCalc.Push(obj);
+            _codepos++;
+        }
+        public void Ldarga(int pos)
+        {
+            stackCalc.Push(new RefObj(this, pos, RefType.arg));
+            _codepos++;
+        }
+        //逻辑计算
+
+        public void Ceq()
+        {
+            var obj2 = stackCalc.Pop();
+            var obj1 = stackCalc.Pop();
+            VBox n2 = obj2 as VBox;
+            VBox n1 = obj1 as VBox;
+            bool beq = false;
+            if (obj1 == null || obj2 == null)
+            {
+                beq = obj1 == obj2;
+            }
+            else if (n1 == null || n2 == null)
+
+            {
+                if (n1 != null)
+                {
+                    n2 = ValueOnStack.MakeVBox(obj2.GetType());
+                    n2.SetDirect(obj2);
+                    beq = n1.logic_eq(n2);
+                }
+                else if (n2 != null)
+                {
+                    n1 = ValueOnStack.MakeVBox(obj1.GetType());
+                    n1.SetDirect(obj1);
+                    beq = n1.logic_eq(n2);
+                }
+                else
+                {
+                    if (obj1 != null)
+                        beq = obj1.Equals(obj2);
+                    else
+                        beq = (obj1 == obj2);
+                }
+            }
+            else
+            {
+                beq = n1.logic_eq(n2);
+            }
+
+
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+            stackCalc.Push(ValueOnStack.MakeVBoxBool(beq));
+            _codepos++;
+        }
+        public void Cgt()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+
+
+            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_gt(n2)));
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+            _codepos++;
+        }
+        public void Cgt_Un()
+        {
+            object _n2 = stackCalc.Pop();
+            object _n1 = stackCalc.Pop();
+            if (_n2 == null)
+            {
+                stackCalc.Push(ValueOnStack.MakeVBoxBool(_n1 != null));
+                _codepos++;
+            }
+            else
+            {
+                VBox n2 = GetVBox(_n2);
+                VBox n1 = GetVBox(_n1);
+
+                stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_gt_Un(n2)));
+                ValueOnStack.UnUse(n1);
+                ValueOnStack.UnUse(n2);
+                _codepos++;
+            }
+        }
+        public void Clt()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_lt(n2)));
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+            _codepos++;
+        }
+        public void Clt_Un()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            stackCalc.Push(ValueOnStack.MakeVBoxBool(n1.logic_lt_Un(n2)));
+            ValueOnStack.UnUse(n1);
+            ValueOnStack.UnUse(n2);
+            _codepos++;
+        }
+        public void Ckfinite()
+        {
+            object n1 = stackCalc.Pop();
+            if (n1 is float)
+            {
+                float v = (float)n1;
+                stackCalc.Push(float.IsInfinity(v) || float.IsNaN(v) ? 1 : 0);
+            }
+            else
+            {
+                double v = (double)n1;
+                stackCalc.Push(double.IsInfinity(v) || double.IsNaN(v) ? 1 : 0);
+            }
+            _codepos++;
+        }
+        //算术操作
+        public void Add()
+        {
+            VBox n2 = GetVBox(stackCalc.Pop());
+            object n1 = stackCalc.Pop();
+            if (n1 is VBox)
+            {
+                VBox n_1 = n1 as VBox;
+                n_1.Add(n2);
+                stackCalc.Push(n_1);
+            }
+            else
+            {
+                VBox n_1 = GetVBox(n1);
+                n_1.Add(n2);
+                stackCalc.Push(n_1.BoxDefine());
+                ValueOnStack.UnUse(n_1);
+
+            }
+            ValueOnStack.UnUse(n2);
+            _codepos++;
+        }
+
+        //Modify by hjx
+        public VBox GetVBox(object obj)
+        {
+            VBox box = null;
+            if (obj is VBox)
+            {
+                box = obj as VBox;
+            }
+            else
+            {
+                box = ValueOnStack.MakeVBox(obj.GetType());
+                box.SetDirect(obj);
+            }
+            return box;
+        }
+
+
+
+
+
+
+
+
+
+
+        public void Sub()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            object n1 = stackCalc.Pop();
+            if (n1 is VBox)
+            {
+                VBox n_1 = n1 as VBox;
+                n_1.Sub(n2);
+                stackCalc.Push(n_1);
+            }
+            else
+            {
+                VBox n_1 = ValueOnStack.MakeVBox(n1.GetType());
+                n_1.SetDirect(n1);
+                n_1.Sub(n2);
+                stackCalc.Push(n_1.BoxDefine());
+                ValueOnStack.UnUse(n_1);
+
+            }
+            ValueOnStack.UnUse(n2);
+
+            _codepos++;
+        }
+        public void Mul()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Mul(n2);
+            stackCalc.Push(n1);
+            ValueOnStack.UnUse(n2);
+
+            _codepos++;
+        }
+        public void Div()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Div(n2);
+            stackCalc.Push(n1);
+            ValueOnStack.UnUse(n2);
+
+            _codepos++;
+        }
+        public void Div_Un()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Div(n2);//!!! _un
+            stackCalc.Push(n1);
+            ValueOnStack.UnUse(n2);
+
+            _codepos++;
+        }
+        public void Rem()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Mod(n2);
+            stackCalc.Push(n1);
+            ValueOnStack.UnUse(n2);
+
+            _codepos++; ;
+        }
+        public void Rem_Un()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Mod(n2);//!!!_un
+            stackCalc.Push(n1);
+            ValueOnStack.UnUse(n2);
+
+            _codepos++;
+        }
+        public void Neg()
+        {
+
+            object n1 = stackCalc.Pop();
+            if (n1 is VBox)
+            {
+                VBox v = n1 as VBox;
+                var obj = v.Clone();
+                obj.Neg();
+                stackCalc.Push(obj);
+                ValueOnStack.UnUse(v);
+
+
+            }
+            else if (n1 is int)
+            {
+                stackCalc.Push(-(int)n1);
+            }
+            else if (n1 is Int64)
+            {
+                stackCalc.Push(-(Int64)n1);
+            }
+
+            else
+            {
+                stackCalc.Push(n1);
+            }
+
+            _codepos++;
+        }
+        //转换
+        public void Conv_I1()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.SBYTE));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((sbyte)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_U1()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.BYTE));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((byte)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_I2()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT16));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((Int16)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_U2()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT16));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((UInt16)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_I4()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((Int32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_U4()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((UInt32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_I8()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT64));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((Int64)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_U8()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT64));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((UInt64)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_I()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((Int32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_U()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((UInt32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_R4()
+        {
+
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.FLOAT));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                if (num1.GetType() == typeof(double))
+                {
+                    //Modify by hjx
+                    stackCalc.Push((float)(double)num1);
+                }
+                else
+                {
+                    stackCalc.Push((float)num1);
+                }
+            }
+            _codepos++;
+        }
+        public void Conv_R8()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.DOUBLE));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((double)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_R_Un()
+        {
+
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.FLOAT));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((float)num1);
+            }
+            _codepos++;
+        }
+
+        ////数组
+        public void NewArr(ThreadContext context, Type type)
+        {
+            //string typename = type.FullName + "[]";
+            //var _type = context.environment.GetType(typename, type.Module);
+            //MethodParamList tlist = MethodParamList.MakeList_OneParam_Int(context.environment);
+            //var m = _type.GetMethod(".ctor", tlist);
+            var objv = stackCalc.Pop();
+
+
+            if (objv is VBox)
+            {
+                ValueOnStack.UnUse(objv as VBox);
+                objv = (objv as VBox).BoxDefine();
+            }
+            var array = Array.CreateInstance(type, (int)objv);
+            stackCalc.Push(array);
+            _codepos++;
+        }
+        public void LdLen()
+        {
+            var obj = stackCalc.Pop();
+            Array a = obj as Array;
+            var vbox = ValueOnStack.MakeVBox(NumberType.INT32);
+            vbox.v32 = a.Length;
+            stackCalc.Push(vbox);
+            _codepos++;
+        }
+        public void Ldelema(object obj)
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            Array array = stackCalc.Pop() as Array;
+
+
+            stackCalc.Push(new RefObj(array, index));
+            _codepos++;
+            //_codepos++;
+        }
+        public void Ldelem_I1()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var _array = stackCalc.Pop();
+            if (_array is sbyte[])
+            {
+                sbyte[] array = _array as sbyte[]; ;
+                var box = ValueOnStack.MakeVBox(NumberType.SBYTE);
+                box.v32 = array[index];
+                stackCalc.Push(box);
+            }
+            else if (_array is bool[])
+            {
+                bool[] array = _array as bool[]; ;
+                var box = ValueOnStack.MakeVBox(NumberType.BOOL);
+                box.v32 = array[index] == true ? 1 : 0;
+                stackCalc.Push(box);
+            }
+            else
+            {
+                throw new Exception("not support.this array i1");
+            }
+
+            _codepos++;
+        }
+        public void Ldelem_U1()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            object obj = stackCalc.Pop();
+            if (obj is byte[])
+            {
+                byte[] array = obj as byte[];
+                var box = ValueOnStack.MakeVBox(NumberType.BYTE);
+                box.v32 = array[index];
+                stackCalc.Push(box);
+                _codepos++;
+            }
+            else if (obj is bool[])
+            {
+                bool[] array = obj as bool[];
+                var box = ValueOnStack.MakeVBox(NumberType.BOOL);
+                box.v32 = array[index] ? 1 : 0;
+                stackCalc.Push(box);
+                _codepos++;
+            }
+        }
+
+        public void Ldelem_I2()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            Int16[] array = stackCalc.Pop() as Int16[];
+            var box = ValueOnStack.MakeVBox(NumberType.INT16);
+            box.v32 = array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldelem_U2()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var _array = stackCalc.Pop();
+            if (_array is UInt16[])
+            {
+                UInt16[] array = _array as UInt16[];
+                var box = ValueOnStack.MakeVBox(NumberType.UINT16);
+                box.v32 = array[index];
+                stackCalc.Push(box);
+            }
+            else
+            {
+                char[] array = _array as char[];
+                var box = ValueOnStack.MakeVBox(NumberType.CHAR);
+                box.v32 = array[index];
+                stackCalc.Push(box);
+            }
+
+            _codepos++;
+        }
+        public void Ldelem_I4()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            int[] array = stackCalc.Pop() as int[];
+            var box = ValueOnStack.MakeVBox(NumberType.INT32);
+            box.v32 = array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldelem_U4()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            uint[] array = stackCalc.Pop() as uint[];
+            var box = ValueOnStack.MakeVBox(NumberType.UINT32);
+            box.v32 = (int)array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+
+        public void Ldelem_I8()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var obj = stackCalc.Pop();
+            if (obj is Int64[])
+            {
+                Int64[] array = obj as Int64[];
+                var box = ValueOnStack.MakeVBox(NumberType.INT64);
+                box.v64 = array[index];
+                stackCalc.Push(box);
+            }
+            else
+            {
+                UInt64[] array = obj as UInt64[];
+                var box = ValueOnStack.MakeVBox(NumberType.INT64);
+                box.v64 = (long)array[index];
+                stackCalc.Push(box);
+            }
+            _codepos++;
+        }
+        public void Ldelem_I()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            int[] array = stackCalc.Pop() as int[];
+            var box = ValueOnStack.MakeVBox(NumberType.INT32);
+            box.v32 = array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldelem_R4()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            float[] array = stackCalc.Pop() as float[];
+            var box = ValueOnStack.MakeVBox(NumberType.FLOAT);
+            box.vDF = array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldelem_R8()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            double[] array = stackCalc.Pop() as double[];
+            var box = ValueOnStack.MakeVBox(NumberType.DOUBLE);
+            box.vDF = array[index];
+            stackCalc.Push(box);
+            _codepos++;
+        }
+        public void Ldelem_Ref()
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            Array array = stackCalc.Pop() as Array;
+            stackCalc.Push(array.GetValue(index));
+            _codepos++;
+        }
+        public void Ldelem_Any(object obj)
+        {
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            Array array = stackCalc.Pop() as Array;
+
+            stackCalc.Push(array.GetValue(index));
+            _codepos++;
+        }
+        public void Stelem_I()
+        {
+            Stelem_I4();
+            //var obj = stackCalc.Pop();
+            //int value = 0;
+            //if (obj is VBox)
+            //{
+            //    value = (obj as VBox).ToInt();
+            //}
+            //else
+            //{
+            //    value = (Int32)obj;
+            //}
+            //var indexobj = stackCalc.Pop();
+            //int index = 0;
+            //if ((indexobj is VBox))
+            //{
+            //    index = (indexobj as VBox).ToInt();
+            //}
+            //else
+            //{
+            //    index = (int)indexobj;
+            //}
+            //var array = stackCalc.Pop() as Int32[];
+            //array[index] = value;
+            //_codepos++;
+        }
+        public void Stelem_I1()
+        {
+            var obj = stackCalc.Pop();
+            int value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToInt();
+                ValueOnStack.UnUse(obj as VBox);
+            }
+            else
+            {
+                value = (sbyte)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var array = stackCalc.Pop();
+            if (array is sbyte[])
+            {
+                (array as sbyte[])[index] = (sbyte)value;
+            }
+            else if (array is byte[])
+            {
+                (array as byte[])[index] = (byte)value;
+            }
+            else if (array is bool[])
+            {
+                (array as bool[])[index] = value > 0;
+
+            }
+
+            _codepos++;
+        }
+        public void Stelem_I2()
+        {
+            var obj = stackCalc.Pop();
+            int value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToInt();
+                ValueOnStack.UnUse(obj as VBox);
+            }
+            else
+            {
+                value = (Int16)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var array = stackCalc.Pop();
+            if (array is char[])
+            {
+                (array as char[])[index] = (char)value;
+            }
+            else if (array is Int16[])
+            {
+                (array as Int16[])[index] = (Int16)value;
+            }
+            else if (array is UInt16[])
+            {
+                (array as UInt16[])[index] = (UInt16)value;
+            }
+
+            _codepos++;
+        }
+        public void Stelem_I4()
+        {
+            var obj = stackCalc.Pop();
+            int value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToInt();
+                ValueOnStack.UnUse(obj as VBox);
+            }
+            else
+            {
+                value = (Int32)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var _array = stackCalc.Pop();
+            if (_array is Int32[])
+            {
+
+                var array = _array as Int32[];
+                array[index] = (Int32)value;
+
+            }
+            else if (_array is UInt32[])
+            {
+                var array = _array as UInt32[];
+                array[index] = (UInt32)value;
+
+            }
+            _codepos++;
+        }
+        public void Stelem_I8()
+        {
+            var obj = stackCalc.Pop();
+            long value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToInt64();
+                ValueOnStack.UnUse(obj as VBox);
+            }
+            else
+            {
+                value = (Int64)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var _array = stackCalc.Pop();
+            if (_array is Int64[])
+            {
+
+                var array = _array as Int64[];
+                array[index] = (Int64)value;
+
+            }
+            else if (_array is UInt64[])
+            {
+                var array = _array as UInt64[];
+                array[index] = (UInt64)value;
+
+            }
+            _codepos++;
+        }
+        public void Stelem_R4()
+        {
+            var obj = stackCalc.Pop();
+            float value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToFloat();
+                ValueOnStack.UnUse(obj as VBox);
+
+            }
+            else
+            {
+                value = (float)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var array = stackCalc.Pop() as float[];
+            array[index] = value;
+            _codepos++;
+        }
+        public void Stelem_R8()
+        {
+            var obj = stackCalc.Pop();
+            double value = 0;
+            if (obj is VBox)
+            {
+                value = (obj as VBox).ToDouble();
+                ValueOnStack.UnUse(obj as VBox);
+
+            }
+            else
+            {
+                value = (double)obj;
+            }
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var array = stackCalc.Pop() as double[];
+            array[index] = value;
+            _codepos++;
+        }
+        public void Stelem_Ref()
+        {
+            var value = stackCalc.Pop();
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if ((indexobj is VBox))
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+
+            }
+            else
+            {
+                index = (int)indexobj;
+            }
+            var array = stackCalc.Pop() as Object[];
+
+            array[index] = value;
+            _codepos++;
+        }
+
+        public void Stelem_Any()
+        {
+            var value = stackCalc.Pop();
+            var indexobj = stackCalc.Pop();
+            int index = 0;
+            if (indexobj is VBox)
+            {
+                index = (indexobj as VBox).ToInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+
+            }
+            else index = (int)indexobj;
+            var array = stackCalc.Pop() as Array;
+            array.SetValue(value, index);
+            _codepos++;
+        }
+
+        //寻址类
+        public void NewObj(ThreadContext context, IMethod _clrmethod)
+        {
+            //MethodParamList list = new MethodParamList(context.environment, method);
+            object[] _pp = null;
+            bool bCLR = _clrmethod is IMethod_Sharp;
+            if (_clrmethod.ParamList != null)
+            {
+                _pp = new object[_clrmethod.ParamList.Count];
+                for (int i = 0; i < _pp.Length; i++)
+                {
+                    int iCallPPos = _pp.Length - 1 - i;
+                    ICLRType pType = _clrmethod.ParamList[iCallPPos];
+                    var pp = stackCalc.Pop();
+                    if (pp is VBox && !bCLR)
+                    {
+                        ValueOnStack.UnUse(pp as VBox);
+                        pp = (pp as VBox).BoxDefine();
+                    }
+                    if ((pp is int) && (pType.TypeForSystem != typeof(int) && pType.TypeForSystem != typeof(object)))
+                    {
+                        var _vbox = ValueOnStack.MakeVBox(pType);
+                        if (_vbox != null)
+                        {
+                            _vbox.SetDirect(pp);
+                            if (bCLR)
+                                pp = _vbox;
+                            else
+                                pp = _vbox.BoxDefine();
+                        }
+                    }
+                    _pp[iCallPPos] = pp;
+                }
+            }
+
+            //var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
+            object returnvar = _clrmethod.Invoke(context, null, _pp);
+
+            stackCalc.Push(returnvar);
+
+            _codepos++;
+        }
+        //public void NewObj(ThreadContext context, Mono.Cecil.MethodReference method)
+        //{
+        //    object[] _pp = null;
+        //    if (method.Parameters.Count > 0)
+        //    {
+        //        _pp = new object[method.Parameters.Count];
+        //        for (int i = 0; i < _pp.Length; i++)
+        //        {
+        //            _pp[_pp.Length - 1 - i] = stackCalc.Pop();
+        //        }
+        //    }
+        //    var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
+
+        //    MethodParamList list = new MethodParamList(context.environment, method);
+
+        //    object returnvar = typesys.GetMethod(method.Name, list).Invoke(context, null, _pp);
+
+        //    stackCalc.Push(returnvar);
+
+
+
+
+        //    _codepos++;
+
+        //}
+        public void Ldfld(ThreadContext context, IField field)
+        {
+            var obj = stackCalc.Pop();
+
+            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //ar ff = type.GetField(field.Name);
+            if (obj is RefObj)
+            {
+                obj = (obj as RefObj).Get();
+            }
+            var value = field.Get(obj);
+            VBox box = ValueOnStack.MakeVBox(field.FieldType);
+            if (box != null)
+            {
+                box.SetDirect(value);
+                value = box;
+            }
+            stackCalc.Push(value);
+            //System.Type t =obj.GetType();
+            _codepos++;
+        }
+        public void Ldflda(ThreadContext context, IField field)
+        {
+            var obj = stackCalc.Pop();
+            if (obj is RefObj)
+            {
+                obj = (obj as RefObj).Get();
+            }
+            // var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //var ff = type.GetField(field.Name);
+
+            stackCalc.Push(new RefObj(field, obj));
+
+            _codepos++;
+        }
+        public void Ldsfld(ThreadContext context, IField field)
+        {
+            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //var ff = type.GetField(field.Name);
+            var value = field.Get(null);
+            VBox box = ValueOnStack.MakeVBox(field.FieldType);
+            if (box != null)
+            {
+                box.SetDirect(value);
+                value = box;
+            }
+            stackCalc.Push(value);
+            //System.Type t =obj.GetType();
+            _codepos++;
+        }
+        public void Ldsflda(ThreadContext context, IField field)
+        {
+            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //var ff = type.GetField(field.Name);
+
+            stackCalc.Push(new RefObj(field, null));
+
+            _codepos++;
+        }
+        public void Stfld(ThreadContext context, IField field)
+        {
+            var value = stackCalc.Pop();
+
+            var obj = stackCalc.Pop();
+            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //var ff = type.GetField(field.Name);
+            if (obj is RefObj)
+            {
+                var _this = (obj as RefObj).Get();
+                if (_this == null && !field.isStatic)
+                {
+                    (obj as RefObj).Set(field.DeclaringType.InitObj());
+                }
+                obj = (obj as RefObj).Get();
+            }
+            if (value is VBox)
+            {
+                ValueOnStack.UnUse(value as VBox);
+                value = (value as VBox).BoxDefine();
+            }
+            //else
+            {//某些类型需要转换。。。
+                VBox fbox = ValueOnStack.MakeVBox(field.FieldType);
+                if (fbox != null)
+                {
+                    fbox.SetDirect(value);
+                    value = fbox.BoxDefine();
+                }
+            }
+            field.Set(obj, value);
+            _codepos++;
+        }
+        public void Stsfld(ThreadContext context, IField field)
+        {
+            var value = stackCalc.Pop();
+            //var obj = stackCalc.Pop();
+
+            if (value is VBox)
+            {
+                ValueOnStack.UnUse(value as VBox);
+                value = (value as VBox).BoxDefine();
+            }
+            //var type = context.environment.GetType(field.DeclaringType.FullName, field.Module);
+            //var ff = type.GetField(field.Name);
+            field.Set(null, value);
+
+            _codepos++;
+        }
+        public void Constrained(ThreadContext context, ICLRType obj)
+        {
+
+            _codepos++;
+        }
+        public void Isinst(ThreadContext context, ICLRType _type)
+        {
+            var value = stackCalc.Pop();
+            //var _type = context.environment.GetType(obj.FullName, obj.Module);
+            if (_type.IsInst(value))
+                stackCalc.Push(value);
+            else
+                stackCalc.Push(null);
+            _codepos++;
+        }
+        public void Ldtoken(ThreadContext context, object token)
+        {
+            //string fname = obj.FullName;
+            //string tfname = obj.FieldType.FullName;
+            //var _type = context.environment.GetType(obj.DeclaringType.FullName, obj.Module);
+            //var field = _type.GetField(obj.Name);
+
+            stackCalc.Push(token);
+            _codepos++;
+        }
+
+        public void Conv_Ovf_I1()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.SBYTE));
+                ValueOnStack.UnUse(b);
+            }
+            else
+            {
+                stackCalc.Push((sbyte)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_U1()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.BYTE));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((byte)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_I2()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT16));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int16)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_U2()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT16));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int16)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_I4()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_U4()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((UInt32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_I8()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT64));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int64)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_U8()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT64));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int64)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_I()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.INT32));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((Int32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_U()
+        {
+            object num1 = stackCalc.Pop();
+            VBox b = num1 as VBox;
+            if (b != null)
+            {
+                stackCalc.Push(ValueOnStack.Convert(b, NumberType.UINT32));
+                ValueOnStack.UnUse(b);
+
+            }
+            else
+            {
+                stackCalc.Push((UInt32)num1);
+            }
+            _codepos++;
+        }
+        public void Conv_Ovf_I1_Un()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void Conv_Ovf_U1_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_I2_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_U2_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_I4_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_U4_Un()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void Conv_Ovf_I8_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_U8_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_I_Un()
+        {
+            throw new NotImplementedException();
+        }
+        public void Conv_Ovf_U_Un()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void Ldftn(ThreadContext context, IMethod method)
+        {
+            stackCalc.Push(new RefFunc(method, null));
+            //throw new NotImplementedException();
+            _codepos++;
+        }
+        public void Ldvirtftn(ThreadContext context, IMethod method)
+        {
+            object _this = stackCalc.Pop();
+            stackCalc.Push(new RefFunc(method, _this));
+
+            _codepos++;
+        }
+
+        public void Starg(ThreadContext context, int p)
+        {
+            object _this = stackCalc.Pop();
+            if (_this is VBox)
+            {
+                ValueOnStack.UnUse(_this as VBox);
+
+                _this = (_this as VBox).Clone();
+            }
+            this._params[p] = _this;
+            _codepos++;
+            //_codepos++;
+        }
+        //public void Ldarga(ThreadContext context, object obj)
+        //{
+        //    int pos=            (obj as Mono.Cecil.ParameterDefinition).Index;
+        //    stackCalc.Push(new RefObj(this, pos, RefType.arg));
+        //    Type t = obj.GetType();
+        //    //throw new NotImplementedException(t.ToString());
+        //    _codepos++;
+        //}
+        public void Calli(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+
+
+        public void Break(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+
+        public void Ldnull()
+        {
+            stackCalc.Push(null);
+            _codepos++;
+        }
+        public void Jmp(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+
+        public void Switch(ThreadContext context, int[] index)
+        {
+            var indexobj = stackCalc.Pop();
+            uint pos = 0;
+            if (indexobj is VBox)
+            {
+                pos = (indexobj as VBox).ToUInt();
+                ValueOnStack.UnUse(indexobj as VBox);
+            }
+            else if (indexobj is int)
+            {
+                pos = (uint)(int)indexobj;
+            }
+            else
+            {
+                pos = uint.Parse(indexobj.ToString());
+            }
+            if (pos >= index.Length)
+            {
+                _codepos++;
+
+            }
+            else
+            {
+                _codepos = index[pos];
+                //_pos = poss[pos];
+            }
+        }
+        public void Ldind_I1()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_I1:");
+            //_codepos++;
+        }
+        public void Ldind_U1()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_U1:");
+            //_codepos++;
+        }
+        public void Ldind_I2()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_I2:");
+            //_codepos++;
+        }
+        public void Ldind_U2()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_U2:");
+            //_codepos++;
+        }
+        public void Ldind_I4()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_I4:");
+            //_codepos++;
+        }
+        public void Ldind_U4()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_U4:");
+            //_codepos++;
+        }
+        public void Ldind_I8()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_I8:");
+            //_codepos++;
+        }
+        public void Ldind_I()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_I:");
+            //_codepos++;
+        }
+        public void Ldind_R4()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_R4:");
+            //_codepos++;
+        }
+        public void Ldind_R8()
+        {
+            object obje = stackCalc.Pop();
+            if (obje is RefObj)
+            {
+                RefObj _ref = obje as RefObj;
+                object value = _ref.Get();
+                VBox box = ValueOnStack.MakeVBox(value.GetType());
+                box.SetDirect(value);
+                stackCalc.Push(box);
+                _codepos++;
+                return;
+            }
+            throw new Exception("not impl Ldind_R8:");
+            //_codepos++;
+        }
+        public void Ldind_Ref()
+        {
+
+            throw new Exception("not impl Ldind_Ref:");
+            //_codepos++;
+        }
+        public void Stind_Ref(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+            }
+
+            _codepos++;
+        }
+        public void Stind_I1(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void Stind_I2(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void Stind_I4(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void Stind_I8(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void Stind_R4(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void Stind_R8(ThreadContext context, object obj)
+        {
+            var o1 = stackCalc.Pop();
+            var o2 = stackCalc.Pop();
+            if (o2 is RefObj)
+            {
+                (o2 as RefObj).Set(o1 is VBox ? (o1 as VBox).BoxDefine() : o1);
+                ValueOnStack.UnUse(o1 as VBox);
+
+            }
+
+            _codepos++;
+        }
+        public void And()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.And(n2);
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Or()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Or(n2);
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Xor()
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Xor(n2);
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Shl(ThreadContext context, object obj)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.v32 <<= n2.v32;
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+        }
+        public void Shr(ThreadContext context, object obj)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.v32 >>= n2.v32;
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Shr_Un(ThreadContext context, object obj)
+        {
+            VBox n2 = stackCalc.Pop() as VBox;
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.v32 >>= n2.v32;
+            stackCalc.Push(n1);
+            _codepos++;
+
+            ValueOnStack.UnUse(n2);
+
+        }
+        public void Not()
+        {
+
+            VBox n1 = stackCalc.Pop() as VBox;
+            n1.Not();
+            stackCalc.Push(n1);
+            _codepos++;
+
+
+        }
+        public void Cpobj(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Ldobj(ThreadContext context, object obj)
+        {
+            var pos = stackCalc.Pop() as RefObj;
+
+            stackCalc.Push(pos.Get());
+
+            _codepos++;
+        }
+        public void Castclass(ThreadContext context, ICLRType _type)
+        {
+            if (_type is ICLRType_System)
+            {
+                var obj = stackCalc.Peek();
+                if (obj != null)
+                {
+                    var ssypt = (_type as ICLRType_System).TypeForSystem;
+                    var otype = obj.GetType();
+
+                    if (otype != ssypt && obj.GetType().IsSubclassOf(ssypt) == false)
+                    {
+                        throw new Exception("不可转换");
+                    }
+
+
+                }
+            }
+
+
+            //throw new NotImplementedException(t.ToString());
+            _codepos++;
+        }
+        public void Throw(ThreadContext context, object obj)
+        {
+            Exception exc = stackCalc.Pop() as Exception;
+            throw exc;
+            //_codepos++;
+        }
+        public void Stobj(ThreadContext context, object obj)
+        {
+            var v = stackCalc.Pop();
+            var addr = stackCalc.Pop() as RefObj;
+            addr.Set(v);
+            _codepos++;
+        }
+        public void Refanyval(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Mkrefany(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+
+        public void Add_Ovf(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Add_Ovf_Un(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Mul_Ovf(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Mul_Ovf_Un(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Sub_Ovf(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Sub_Ovf_Un(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Endfinally(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Stind_I(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Arglist(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+
+        public void Localloc(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Endfilter(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Unaligned(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Volatile()
+        {
+            _codepos++;
+        }
+        //ThreadContext context, object obj)
+        //{
+        //    Type t = obj.GetType();
+        //    throw new NotImplementedException(t.ToString());
+        //    //_codepos++;
+        //}
+        public void Tail(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Initobj(ThreadContext context, ICLRType _type)
+        {
+            RefObj _this = stackCalc.Pop() as RefObj;
+
+            //var typesys = context.environment.GetType(method.DeclaringType.FullName, method.Module);
+            var _object = _type.InitObj();
+
+            _this.Set(_object);
+
+            _codepos++;
+        }
+        public void Cpblk(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Initblk(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void No(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Rethrow(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Sizeof(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Refanytype(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+        public void Readonly(ThreadContext context, object obj)
+        {
+            Type t = obj.GetType();
+            throw new NotImplementedException(t.ToString());
+            //_codepos++;
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Execute/StackFrame.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/StackFrame.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 5241929f3062a2e489f0ad1b06c94b65
+guid: 838bbff288387bf45b27e788d3ab4dab
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1636 - 1509
Unity/Assets/Plugins/CLRSharp/Execute/ValueOnStack.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/ValueOnStack.cs

@@ -1,1509 +1,1636 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    //栈上值类型,拆箱,装箱转换非常频繁,需要处理一下。
-    //
-    public class ValueOnStack
-    {
-        static Dictionary<Type, NumberType> typecode = null;
-        public static NumberType GetTypeCode(Type type)
-        {
-            if (typecode == null)
-            {
-                typecode = new Dictionary<Type, NumberType>();
-                //typecode[null] = 0;
-                typecode[typeof(bool)] = NumberType.BOOL;
-                typecode[typeof(sbyte)] = NumberType.SBYTE;
-                typecode[typeof(byte)] = NumberType.BYTE;
-                typecode[typeof(Int16)] = NumberType.INT16;
-                typecode[typeof(UInt16)] = NumberType.UINT16;
-                typecode[typeof(Int32)] = NumberType.INT32;
-                typecode[typeof(UInt32)] = NumberType.UINT32;
-                typecode[typeof(Int64)] = NumberType.INT64;
-                typecode[typeof(UInt64)] = NumberType.UINT64;
-                typecode[typeof(float)] = NumberType.FLOAT;
-                typecode[typeof(double)] = NumberType.DOUBLE;
-                typecode[typeof(IntPtr)] = NumberType.INTPTR;
-                typecode[typeof(UIntPtr)] = NumberType.UINTPTR;
-                typecode[typeof(decimal)] = NumberType.DECIMAL;
-                typecode[typeof(char)] = NumberType.CHAR;
-
-            }
-            if (type.IsEnum) return NumberType.ENUM;
-            NumberType t = NumberType.IsNotNumber;
-            typecode.TryGetValue(type, out t);
-            return t;
-        }
-        ////valuetype
-        //        public NumberType TypeOnDef;
-        //        public NumberOnStack TypeOnStack;
-        //        public IBox box;
-        //public static IBox Make(ICLRType type)
-        //{
-        //    return Make(type.TypeForSystem);
-
-        //}
-        public static VBox MakeVBox(ICLRType type)
-        {
-            return MakeVBox(type.TypeForSystem);
-        }
-        //public static IBox MakeBool(bool b)
-        //{
-        //    BoxInt32 box = Make(NumberType.BOOL) as BoxInt32;
-        //    box.value = b ? 1 : 0;
-        //    return box;
-        //}
-        public static VBox MakeVBoxBool(bool b)
-        {
-            VBox box = MakeVBox(NumberType.BOOL);
-            box.v32 = b ? 1 : 0;
-            return box;
-        }
-        //public static IBox Make(System.Type type)
-        //{
-        //    NumberType code = GetTypeCode(type);
-        //    return Make(code);
-        //}
-        public static VBox MakeVBox(System.Type type)
-        {
-            NumberType code = GetTypeCode(type);
-            return MakeVBox(code);
-        }
-        //public static IBox Make(NumberType code)
-        //{
-
-        //    switch (code)
-        //    {
-        //        case NumberType.BOOL:
-        //        case NumberType.SBYTE:
-        //        case NumberType.BYTE:
-        //        case NumberType.CHAR:
-        //        case NumberType.INT16:
-        //        case NumberType.UINT16:
-        //        case NumberType.INT32:
-        //        case NumberType.UINT32:
-        //            if (unusedInt32.Count > 0)
-        //            {
-        //                var b = unusedInt32.Dequeue();
-        //                b.type = code;
-        //                return b;
-        //            }
-        //            else
-        //                return new BoxInt32(code);
-        //        case NumberType.INT64:
-        //        case NumberType.UINT64:
-        //            if (unusedInt64.Count > 0)
-        //            {
-        //                var b = unusedInt64.Dequeue();
-        //                b.type = code;
-        //                return b;
-        //            }
-        //            else
-        //                return new BoxInt64(code);
-        //        case NumberType.FLOAT:
-        //        case NumberType.DOUBLE:
-        //            if (unusedIntFL.Count > 0)
-        //            {
-        //                var b = unusedIntFL.Dequeue();
-        //                b.type = code;
-        //                return b;
-        //            }
-        //            else
-        //                return new BoxDouble(code);
-        //        default:
-        //            return null;
-        //    }
-
-        //}
-        public static VBox MakeVBox(NumberType code)
-        {
-
-            switch (code)
-            {
-                case NumberType.BOOL:
-                case NumberType.SBYTE:
-                case NumberType.BYTE:
-                case NumberType.CHAR:
-                case NumberType.INT16:
-                case NumberType.UINT16:
-                case NumberType.INT32:
-                case NumberType.UINT32:
-                case NumberType.ENUM:
-                    if (unusedVBox.Count > 0)
-                    {
-                        var b = unusedVBox.Dequeue();
-                        b.typeStack = NumberOnStack.Int32;
-                        b.type = code;
-                        return b;
-                    }
-                    return new VBox(NumberOnStack.Int32, code);
-                case NumberType.INT64:
-                case NumberType.UINT64:
-                    if (unusedVBox.Count > 0)
-                    {
-                        var b = unusedVBox.Dequeue();
-                        b.typeStack = NumberOnStack.Int64;
-                        b.type = code;
-                        return b;
-                    }
-                    return new VBox(NumberOnStack.Int64, code);
-                case NumberType.FLOAT:
-                case NumberType.DOUBLE:
-                    if (unusedVBox.Count > 0)
-                    {
-                        var b = unusedVBox.Dequeue();
-                        b.typeStack = NumberOnStack.Double;
-                        b.type = code;
-                        return b;
-                    }
-                    return new VBox(NumberOnStack.Double, code);
-                default:
-                    return null;
-            }
-
-        }
-        //public static IBox Convert(IBox box, NumberType type)
-        //{
-        //    switch (type)
-        //    {
-        //        case NumberType.BOOL:
-        //        case NumberType.SBYTE:
-        //        case NumberType.BYTE:
-        //        case NumberType.CHAR:
-        //        case NumberType.INT16:
-        //        case NumberType.UINT16:
-        //        case NumberType.INT32:
-        //        case NumberType.UINT32:
-        //            {
-        //                if (box is BoxInt32) return box;
-        //                BoxInt32 v32 = ValueOnStack.Make(type) as BoxInt32;
-        //                BoxInt64 b64 = box as BoxInt64;
-        //                BoxDouble bdb = box as BoxDouble;
-        //                if (b64 != null)
-        //                    v32.value = (int)b64.value;
-        //                else
-        //                    v32.value = (int)bdb.value;
-        //                return v32;
-        //            }
-        //        case NumberType.INT64:
-        //        case NumberType.UINT64:
-        //            {
-        //                if (box is BoxInt64) return box;
-        //                BoxInt64 v64 = ValueOnStack.Make(type) as BoxInt64;
-        //                BoxInt32 b32 = box as BoxInt32;
-        //                BoxDouble bdb = box as BoxDouble;
-        //                if (b32 != null)
-        //                    v64.value = b32.value;
-        //                else
-        //                    v64.value = (Int64)bdb.value;
-        //                return v64;
-        //            }
-        //        case NumberType.FLOAT:
-        //        case NumberType.DOUBLE:
-        //            {
-        //                if (box is BoxDouble) return box;
-        //                BoxDouble vdb = new BoxDouble(type);
-        //                BoxInt32 b32 = box as BoxInt32;
-        //                BoxInt64 b64 = box as BoxInt64;
-        //                if (b32 != null)
-        //                    vdb.value = b32.value;
-        //                else
-        //                    vdb.value = b64.value;
-        //                return vdb;
-        //            }
-        //        default:
-        //            return null;
-        //    }
-        //}
-
-        public static VBox Convert(VBox box, NumberType type)
-        {
-            VBox b = MakeVBox(type);
-            b.Set(box);
-            return b;
-        }
-        //public static Queue<IBox> unusedInt32 = new Queue<IBox>();
-        //public static Queue<IBox> unusedInt64 = new Queue<IBox>();
-        //public static Queue<IBox> unusedIntFL = new Queue<IBox>();
-
-        public static Queue<VBox> unusedVBox = new Queue<VBox>();
-        public static void UnUse(VBox box)
-        {
-            box.refcount = 0;
-            unusedVBox.Enqueue(box);
-        }
-        //public static void UnUse(IBox box)
-        //{
-        //    switch (box.typeStack)
-        //    {
-        //        case NumberOnStack.Int32:
-        //            unusedInt32.Enqueue(box);
-        //            break;
-        //        case NumberOnStack.Int64:
-        //            unusedInt64.Enqueue(box);
-        //            break;
-        //        case NumberOnStack.Double:
-        //            unusedIntFL.Enqueue(box);
-        //            break;
-        //    }
-        //}
-    }
-    public enum NumberType
-    {
-        IsNotNumber = 0,
-        SBYTE = 1,
-        BYTE = 2,
-        INT16 = 3,
-        UINT16 = 4,
-        INT32 = 5,
-        UINT32 = 6,
-        INT64 = 7,
-        UINT64 = 8,
-        FLOAT = 9,
-        DOUBLE = 10,
-        INTPTR = 11,
-        UINTPTR = 12,
-        DECIMAL = 13,
-        CHAR = 14,
-        BOOL = 15,
-        ENUM = 16,
-    };
-    public enum NumberOnStack
-    {
-        Int32,
-        Int64,
-        Double,
-    }
-    public class VBox
-    {
-        public VBox(NumberOnStack typeStack, NumberType thistype)
-        {
-            this.typeStack = typeStack;
-            this.type = thistype;
-        }
-        public VBox Clone()
-        {
-            VBox b = ValueOnStack.MakeVBox(this.type);
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    b.v32 = this.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    b.v64 = this.v64;
-                    break;
-                case NumberOnStack.Double:
-                    b.vDF = this.v64;
-                    break;
-
-            }
-
-            return b;
-        }
-        public int refcount = 0;
-        public NumberOnStack typeStack;
-        public NumberType type;
-        public Int32 v32;
-        public Int64 v64;
-        public Double vDF;
-        public object BoxStack()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32;
-                case NumberOnStack.Int64:
-                    return v64;
-                case NumberOnStack.Double:
-                    return vDF;
-                default:
-                    return null;
-            }
-
-        }
-        public object BoxDefine()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    switch (type)
-                    {
-                        case NumberType.ENUM:
-                            return v32;
-                        case NumberType.BOOL:
-                            return (v32 > 0);
-                        case NumberType.SBYTE:
-                            return (sbyte)v32;
-                        case NumberType.BYTE:
-                            return (byte)v32;
-                        case NumberType.CHAR:
-                            return (char)v32;
-                        case NumberType.INT16:
-                            return (Int16)v32;
-                        case NumberType.UINT16:
-                            return (UInt16)v32;
-                        case NumberType.INT32:
-                            return (Int32)v32;
-                        case NumberType.UINT32:
-                            return (UInt32)v32;
-                        case NumberType.INT64:
-                            return (Int64)v32;
-                        case NumberType.UINT64:
-                            return (UInt64)v32;
-                        case NumberType.FLOAT:
-                            return (float)v32;
-                        case NumberType.DOUBLE:
-                            return (double)v32;
-                        default:
-                            return null;
-                    }
-                case NumberOnStack.Int64:
-                    switch (type)
-                    {
-                        case NumberType.BOOL:
-                            return (v64 > 0);
-                        case NumberType.SBYTE:
-                            return (sbyte)v64;
-                        case NumberType.BYTE:
-                            return (byte)v64;
-                        case NumberType.CHAR:
-                            return (char)v64;
-                        case NumberType.INT16:
-                            return (Int16)v64;
-                        case NumberType.UINT16:
-                            return (UInt16)v64;
-                        case NumberType.INT32:
-                            return (Int32)v64;
-                        case NumberType.UINT32:
-                            return (UInt32)v64;
-                        case NumberType.INT64:
-                            return (Int64)v64;
-                        case NumberType.UINT64:
-                            return (UInt64)v64;
-                        case NumberType.FLOAT:
-                            return (float)v64;
-                        case NumberType.DOUBLE:
-                            return (double)v64;
-                        default:
-                            return null;
-                    }
-                case NumberOnStack.Double:
-                    switch (type)
-                    {
-                        case NumberType.BOOL:
-                            return (vDF > 0);
-                        case NumberType.SBYTE:
-                            return (sbyte)vDF;
-                        case NumberType.BYTE:
-                            return (byte)vDF;
-                        case NumberType.CHAR:
-                            return (char)vDF;
-                        case NumberType.INT16:
-                            return (Int16)vDF;
-                        case NumberType.UINT16:
-                            return (UInt16)vDF;
-                        case NumberType.INT32:
-                            return (Int32)vDF;
-                        case NumberType.UINT32:
-                            return (UInt32)vDF;
-                        case NumberType.INT64:
-                            return (Int64)vDF;
-                        case NumberType.UINT64:
-                            return (UInt64)vDF;
-                        case NumberType.FLOAT:
-                            return (float)vDF;
-                        case NumberType.DOUBLE:
-                            return (double)vDF;
-                        default:
-                            return null;
-                    }
-                default:
-                    return null;
-            }
-
-        }
-
-        public void Add(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    v32 += right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    v64 += right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    vDF += right.vDF;
-                    break;
-            }
-        }
-        public void Sub(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    v32 -= right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    v64 -= right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    vDF -= right.vDF;
-                    break;
-            }
-        }
-        public void Mul(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    v32 *= right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    v64 *= right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    vDF *= right.vDF;
-                    break;
-            }
-        }
-        public void Div(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    v32 /= right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    v64 /= right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    vDF /= right.vDF;
-                    break;
-            }
-        }
-        public void Mod(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    v32 %= right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    v64 %= right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    vDF %= right.vDF;
-                    break;
-            }
-        }
-
-        //似乎Clone可以替代New系列
-        public VBox Mod_New(VBox right)
-        {
-            VBox newbox = ValueOnStack.MakeVBox(type);
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    newbox.v32 = v32 % right.v32;
-                    break;
-                case NumberOnStack.Int64:
-                    newbox.v64 = v64 % right.v64;
-                    break;
-                case NumberOnStack.Double:
-                    newbox.vDF = vDF % right.vDF;
-                    break;
-            }
-            return newbox;
-
-        }
-
-        //SetValue
-        public void SetDirect(object value)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    if (value is bool)
-                    {
-                        v32 = ((bool)value) ? 1 : 0;
-                    }
-                    else
-                    {
-                        v32 = (int)value;
-                    }
-                    break;
-                case NumberOnStack.Int64:
-                    v64 = (Int64)value;
-                    break;
-                case NumberOnStack.Double:
-                    vDF = (double)Convert.ToDecimal(value);
-                    break;
-            }
-        }
-        public void Set(VBox value)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    if (value.typeStack == typeStack)
-                        v32 = value.v32;
-                    else
-                        v32 = value.ToInt();
-                    break;
-                case NumberOnStack.Int64:
-                    if (value.typeStack == typeStack)
-                        v64 = value.v64;
-                    else
-                        v64 = value.ToInt64();
-                    break;
-                case NumberOnStack.Double:
-                    if (value.typeStack == typeStack)
-                        vDF = value.vDF;
-                    else
-                        vDF = value.ToDouble();
-                    break;
-            }
-        }
-
-
-        public bool logic_eq(VBox right)//=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 == right.v32;
-                case NumberOnStack.Int64:
-                    return v64 == right.v64;
-                case NumberOnStack.Double:
-                    return vDF == right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_ne(VBox right)//!=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 != right.v32;
-                case NumberOnStack.Int64:
-                    return v64 != right.v64;
-                case NumberOnStack.Double:
-                    return vDF != right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_ne_Un(VBox right)//!=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32 != (uint)right.v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64 != (UInt64)right.v64;
-                case NumberOnStack.Double:
-                    return vDF != right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_ge(VBox right)//>=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 >= right.v32;
-                case NumberOnStack.Int64:
-                    return v64 >= right.v64;
-                case NumberOnStack.Double:
-                    return vDF >= right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_ge_Un(VBox right)//>=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32 >= (uint)right.v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64 >= (UInt64)right.v64;
-                case NumberOnStack.Double:
-                    return vDF >= right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_le(VBox right)//<=
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 <= right.v32;
-                case NumberOnStack.Int64:
-                    return v64 <= right.v64;
-                case NumberOnStack.Double:
-                    return vDF <= right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_le_Un(VBox right)
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32 <= (uint)right.v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64 <= (UInt64)right.v64;
-                case NumberOnStack.Double:
-                    return vDF <= right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_gt(VBox right)//>
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 > right.v32;
-                case NumberOnStack.Int64:
-                    return v64 > right.v64;
-                case NumberOnStack.Double:
-                    return vDF > right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_gt_Un(VBox right)//>
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32 > (uint)right.v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64 > (UInt64)right.v64;
-                case NumberOnStack.Double:
-                    return vDF > right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_lt(VBox right)//<
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 < right.v32;
-                case NumberOnStack.Int64:
-                    return v64 < right.v64;
-                case NumberOnStack.Double:
-                    return vDF < right.vDF;
-                default:
-                    return false;
-            }
-        }
-        public bool logic_lt_Un(VBox right)//<
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32 < (uint)right.v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64 < (UInt64)right.v64;
-                case NumberOnStack.Double:
-                    return vDF < right.vDF;
-                default:
-                    return false;
-            }
-        }
-        //////////////////////
-        //To
-        public bool ToBool()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return v32 > 0;
-                case NumberOnStack.Int64:
-                    return v64 > 0;
-                default:
-                    return false;
-            }
-        }
-        public char ToChar()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (char)v32;
-                case NumberOnStack.Int64:
-                    return (char)v64;
-                case NumberOnStack.Double:
-                    return (char)vDF;
-                default:
-                    return (char)0;
-            }
-        }
-        public byte ToByte()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (byte)v32;
-                case NumberOnStack.Int64:
-                    return (byte)v64;
-                case NumberOnStack.Double:
-                    return (byte)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public sbyte ToSByte()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (sbyte)v32;
-                case NumberOnStack.Int64:
-                    return (sbyte)v64;
-                case NumberOnStack.Double:
-                    return (sbyte)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public Int16 ToInt16()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (Int16)v32;
-                case NumberOnStack.Int64:
-                    return (Int16)v64;
-                case NumberOnStack.Double:
-                    return (Int16)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public UInt16 ToUInt16()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (UInt16)v32;
-                case NumberOnStack.Int64:
-                    return (UInt16)v64;
-                case NumberOnStack.Double:
-                    return (UInt16)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public int ToInt()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (int)v32;
-                case NumberOnStack.Int64:
-                    return (int)v64;
-                case NumberOnStack.Double:
-                    return (int)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public uint ToUInt()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (uint)v32;
-                case NumberOnStack.Int64:
-                    return (uint)v64;
-                case NumberOnStack.Double:
-                    return (uint)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public Int64 ToInt64()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (Int64)v32;
-                case NumberOnStack.Int64:
-                    return (Int64)v64;
-                case NumberOnStack.Double:
-                    return (Int64)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public UInt64 ToUInt64()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (UInt64)v32;
-                case NumberOnStack.Int64:
-                    return (UInt64)v64;
-                case NumberOnStack.Double:
-                    return (UInt64)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public float ToFloat()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (float)v32;
-                case NumberOnStack.Int64:
-                    return (float)v64;
-                case NumberOnStack.Double:
-                    return (float)vDF;
-                default:
-                    return 0;
-            }
-        }
-        public double ToDouble()
-        {
-            switch (typeStack)
-            {
-                case NumberOnStack.Int32:
-                    return (double)v32;
-                case NumberOnStack.Int64:
-                    return (double)v64;
-                case NumberOnStack.Double:
-                    return (double)vDF;
-                default:
-                    return 0;
-            }
-        }
-
-
-    }
-    //public interface IBox
-    //{
-    //    object BoxStack();
-    //    object BoxDefine();
-
-    //    void Add(IBox right);
-    //    void Sub(IBox right);
-    //    void Mul(IBox right);
-    //    void Div(IBox right);
-    //    void Mod(IBox right);
-
-    //    IBox Mod_New(IBox right);
-    //    void SetDirect(object value);
-    //    void Set(IBox value);
-
-    //    NumberType type
-    //    {
-    //        get;
-    //        set;
-    //    }
-
-    //    NumberOnStack typeStack
-    //    {
-    //        get;
-    //    }
-
-    //    bool logic_eq(IBox right);//=
-    //    bool logic_ne(IBox right);//!=
-    //    bool logic_ne_Un(IBox right);//!=
-    //    bool logic_ge(IBox right);//>=
-    //    bool logic_ge_Un(IBox right);//>=
-    //    bool logic_le(IBox right);//<=
-    //    bool logic_le_Un(IBox right);
-    //    bool logic_gt(IBox right);//>
-    //    bool logic_gt_Un(IBox right);//>
-    //    bool logic_lt(IBox right);//<
-    //    bool logic_lt_Un(IBox right);//<
-
-    //    bool ToBool();
-    //    int ToInt();
-    //    uint ToUint();
-
-    //    Int64 ToInt64();
-    //    float ToFloat();
-
-    //    double ToDouble();
-
-    //    int refcount
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //}
-    //public class BoxInt32 : IBox
-    //{
-    //    public int refcount
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public BoxInt32(NumberType type)
-    //    {
-    //        this.type = type;
-    //    }
-    //    public NumberType type
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public NumberOnStack typeStack
-    //    {
-    //        get
-    //        {
-    //            return NumberOnStack.Int32;
-    //        }
-    //    }
-    //    public Int32 value;
-    //    public object BoxStack()
-    //    {
-    //        return value;
-    //    }
-
-    //    public object BoxDefine()
-    //    {
-    //        switch (type)
-    //        {
-    //            case NumberType.BOOL:
-    //                return (value > 0);
-    //            case NumberType.SBYTE:
-    //                return (sbyte)value;
-    //            case NumberType.BYTE:
-    //                return (byte)value;
-    //            case NumberType.CHAR:
-    //                return (char)value;
-    //            case NumberType.INT16:
-    //                return (Int16)value;
-    //            case NumberType.UINT16:
-    //                return (UInt16)value;
-    //            case NumberType.INT32:
-    //                return (Int32)value;
-    //            case NumberType.UINT32:
-    //                return (UInt32)value;
-    //            case NumberType.INT64:
-    //                return (Int64)value;
-    //            case NumberType.UINT64:
-    //                return (UInt64)value;
-    //            case NumberType.FLOAT:
-    //                return (float)value;
-    //            case NumberType.DOUBLE:
-    //                return (double)value;
-    //            default:
-    //                return null;
-    //        }
-
-    //    }
-
-    //    public void Set(IBox value)
-    //    {
-
-    //        this.value = (value as BoxInt32).value;
-    //    }
-    //    public void SetDirect(object value)
-    //    {
-    //        if (value is bool)
-    //        {
-    //            this.value = (bool)value ? 1 : 0;
-    //        }
-    //        else
-    //        {
-    //            this.value = (int)value;
-    //        }
-    //    }
-    //    public void Add(IBox right)
-    //    {
-    //        this.value += (right as BoxInt32).value;
-    //    }
-
-    //    public void Sub(IBox right)
-    //    {
-    //        this.value -= (right as BoxInt32).value;
-    //    }
-
-    //    public void Mul(IBox right)
-    //    {
-    //        this.value *= (right as BoxInt32).value;
-    //    }
-
-    //    public void Div(IBox right)
-    //    {
-    //        this.value /= (right as BoxInt32).value;
-    //    }
-    //    public void Mod(IBox right)
-    //    {
-    //        this.value %= (right as BoxInt32).value;
-    //    }
-
-    //    public IBox Mod_New(IBox right)
-    //    {
-    //        BoxInt32 b = ValueOnStack.Make(this.type) as BoxInt32;
-    //        b.value = this.value % (right as BoxInt32).value;
-    //        return b;
-    //    }
-
-    //    public bool logic_eq(IBox right)
-    //    {
-    //        return value == (right as BoxInt32).value;
-    //    }
-
-
-    //    public bool logic_ne(IBox right)
-    //    {
-    //        return value != (right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_ne_Un(IBox right)
-    //    {
-    //        return (UInt32)value != (UInt32)(right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_ge(IBox right)
-    //    {
-    //        return value >= (right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_ge_Un(IBox right)
-    //    {
-    //        return (UInt32)value >= (UInt32)(right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_le(IBox right)
-    //    {
-    //        return value <= (right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_le_Un(IBox right)
-    //    {
-    //        return (UInt32)value <= (UInt32)(right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_gt(IBox right)
-    //    {
-    //        return value > (right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_gt_Un(IBox right)
-    //    {
-    //        return (UInt32)value > (UInt32)(right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_lt(IBox right)
-    //    {
-    //        return value < (right as BoxInt32).value;
-    //    }
-
-    //    public bool logic_lt_Un(IBox right)
-    //    {
-    //        return (UInt32)value < (UInt32)(right as BoxInt32).value;
-    //    }
-
-    //    public bool ToBool()
-    //    {
-    //        return value > 0;
-    //    }
-    //    public int ToInt()
-    //    {
-    //        return (int)value;
-    //    }
-    //    public uint ToUint()
-    //    {
-    //        return (uint)value;
-    //    }
-    //    public Int64 ToInt64()
-    //    {
-    //        return (Int64)value;
-    //    }
-    //    public float ToFloat()
-    //    {
-    //        return (float)value;
-    //    }
-
-    //    public double ToDouble()
-    //    {
-    //        return (double)value;
-    //    }
-    //}
-    //public class BoxInt64 : IBox
-    //{
-    //    public int refcount
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public BoxInt64(NumberType type)
-    //    {
-    //        this.type = type;
-    //    }
-    //    public NumberType type
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public NumberOnStack typeStack
-    //    {
-    //        get
-    //        {
-    //            return NumberOnStack.Int64;
-    //        }
-    //    }
-    //    public Int64 value;
-    //    public object BoxStack()
-    //    {
-    //        return value;
-    //    }
-
-    //    public object BoxDefine()
-    //    {
-    //        switch (type)
-    //        {
-    //            case NumberType.BOOL:
-    //                return (value > 0);
-    //            case NumberType.SBYTE:
-    //                return (sbyte)value;
-    //            case NumberType.BYTE:
-    //                return (byte)value;
-    //            case NumberType.CHAR:
-    //                return (char)value;
-    //            case NumberType.INT16:
-    //                return (Int16)value;
-    //            case NumberType.UINT16:
-    //                return (UInt16)value;
-    //            case NumberType.INT32:
-    //                return (Int32)value;
-    //            case NumberType.UINT32:
-    //                return (UInt32)value;
-    //            case NumberType.INT64:
-    //                return (Int64)value;
-    //            case NumberType.UINT64:
-    //                return (UInt64)value;
-    //            case NumberType.FLOAT:
-    //                return (float)value;
-    //            case NumberType.DOUBLE:
-    //                return (double)value;
-    //            default:
-    //                return null;
-    //        }
-
-    //    }
-    //    public void Set(IBox value)
-    //    {
-    //        this.value = (value as BoxInt64).value;
-    //    }
-    //    public void SetDirect(object value)
-    //    {
-    //        this.value = (Int64)value;
-    //    }
-    //    public void Add(IBox right)
-    //    {
-    //        this.value += (right as BoxInt64).value;
-    //    }
-
-    //    public void Sub(IBox right)
-    //    {
-    //        this.value -= (right as BoxInt64).value;
-    //    }
-
-    //    public void Mul(IBox right)
-    //    {
-    //        this.value *= (right as BoxInt64).value;
-    //    }
-
-    //    public void Div(IBox right)
-    //    {
-    //        this.value /= (right as BoxInt64).value;
-    //    }
-    //    public void Mod(IBox right)
-    //    {
-    //        this.value %= (right as BoxInt64).value;
-    //    }
-    //    public IBox Mod_New(IBox right)
-    //    {
-    //        BoxInt64 b = ValueOnStack.Make(this.type) as BoxInt64;
-    //        b.value = this.value % (right as BoxInt64).value;
-    //        return b;
-    //    }
-
-    //    public bool logic_eq(IBox right)
-    //    {
-    //        return value == (right as BoxInt64).value;
-    //    }
-
-
-    //    public bool logic_ne(IBox right)
-    //    {
-    //        return value != (right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_ne_Un(IBox right)
-    //    {
-    //        return (UInt64)value != (UInt64)(right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_ge(IBox right)
-    //    {
-    //        return value >= (right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_ge_Un(IBox right)
-    //    {
-    //        return (UInt64)value >= (UInt64)(right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_le(IBox right)
-    //    {
-    //        return value <= (right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_le_Un(IBox right)
-    //    {
-    //        return (UInt64)value <= (UInt64)(right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_gt(IBox right)
-    //    {
-    //        return value > (right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_gt_Un(IBox right)
-    //    {
-    //        return (UInt64)value > (UInt64)(right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_lt(IBox right)
-    //    {
-    //        return value < (right as BoxInt64).value;
-    //    }
-
-    //    public bool logic_lt_Un(IBox right)
-    //    {
-    //        return (UInt64)value < (UInt64)(right as BoxInt64).value;
-    //    }
-    //    public bool ToBool()
-    //    {
-    //        return value > 0;
-    //    }
-    //    public int ToInt()
-    //    {
-    //        return (int)value;
-    //    }
-    //    public uint ToUint()
-    //    {
-    //        return (uint)value;
-    //    }
-    //    public Int64 ToInt64()
-    //    {
-    //        return (Int64)value;
-    //    }
-    //    public float ToFloat()
-    //    {
-    //        return (float)value;
-    //    }
-
-    //    public double ToDouble()
-    //    {
-    //        return (double)value;
-    //    }
-    //}
-    //public class BoxDouble : IBox
-    //{
-    //    public int refcount
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public BoxDouble(NumberType type)
-    //    {
-    //        this.type = type;
-    //    }
-    //    public NumberType type
-    //    {
-    //        get;
-    //        set;
-    //    }
-    //    public NumberOnStack typeStack
-    //    {
-    //        get
-    //        {
-    //            return NumberOnStack.Double;
-    //        }
-    //    }
-    //    public double value;
-    //    public object BoxStack()
-    //    {
-    //        return value;
-    //    }
-
-    //    public object BoxDefine()
-    //    {
-    //        switch (type)
-    //        {
-    //            case NumberType.BOOL:
-    //                return (value > 0);
-    //            case NumberType.SBYTE:
-    //                return (sbyte)value;
-    //            case NumberType.BYTE:
-    //                return (byte)value;
-    //            case NumberType.CHAR:
-    //                return (char)value;
-    //            case NumberType.INT16:
-    //                return (Int16)value;
-    //            case NumberType.UINT16:
-    //                return (UInt16)value;
-    //            case NumberType.INT32:
-    //                return (Int32)value;
-    //            case NumberType.UINT32:
-    //                return (UInt32)value;
-    //            case NumberType.INT64:
-    //                return (Int64)value;
-    //            case NumberType.UINT64:
-    //                return (UInt64)value;
-    //            case NumberType.FLOAT:
-    //                return (float)value;
-    //            case NumberType.DOUBLE:
-    //                return (double)value;
-    //            default:
-    //                return null;
-    //        }
-
-    //    }
-
-    //    public void Set(IBox value)
-    //    {
-    //        this.value = (value as BoxDouble).value;
-    //    }
-    //    public void SetDirect(object value)
-    //    {
-
-    //        this.value = (double)Convert.ToDecimal(value);
-    //    }
-    //    public void Add(IBox right)
-    //    {
-    //        this.value += (right as BoxDouble).value;
-    //    }
-
-    //    public void Sub(IBox right)
-    //    {
-    //        this.value -= (right as BoxDouble).value;
-    //    }
-
-    //    public void Mul(IBox right)
-    //    {
-    //        this.value *= (right as BoxDouble).value;
-    //    }
-
-    //    public void Div(IBox right)
-    //    {
-    //        this.value /= (right as BoxDouble).value;
-    //    }
-    //    public void Mod(IBox right)
-    //    {
-    //        this.value %= (right as BoxDouble).value;
-    //    }
-
-    //    public IBox Mod_New(IBox right)
-    //    {
-    //        BoxDouble b = new BoxDouble(this.type);
-    //        b.value = this.value % (right as BoxDouble).value;
-    //        return b;
-    //    }
-
-    //    public bool logic_eq(IBox right)
-    //    {
-    //        return value == (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_ne(IBox right)
-    //    {
-    //        return value != (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_ne_Un(IBox right)
-    //    {
-    //        return value != (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_ge(IBox right)
-    //    {
-    //        return value >= (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_ge_Un(IBox right)
-    //    {
-    //        return value >= (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_le(IBox right)
-    //    {
-    //        return value <= (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_le_Un(IBox right)
-    //    {
-    //        return value <= (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_gt(IBox right)
-    //    {
-    //        return value > (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_gt_Un(IBox right)
-    //    {
-    //        return value > (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_lt(IBox right)
-    //    {
-    //        return value < (right as BoxDouble).value;
-    //    }
-
-    //    public bool logic_lt_Un(IBox right)
-    //    {
-    //        return value < (right as BoxDouble).value;
-    //    }
-    //    public bool ToBool()
-    //    {
-    //        throw new NotImplementedException();
-    //    }
-    //    public int ToInt()
-    //    {
-    //        return (int)value;
-    //    }
-    //    public uint ToUint()
-    //    {
-    //        return (uint)value;
-    //    }
-    //    public Int64 ToInt64()
-    //    {
-    //        return (Int64)value;
-    //    }
-    //    public float ToFloat()
-    //    {
-    //        return (float)value;
-    //    }
-
-    //    public double ToDouble()
-    //    {
-    //        return (double)value;
-    //    }
-    //}
-
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    //栈上值类型,拆箱,装箱转换非常频繁,需要处理一下。
+    //
+    public class ValueOnStack
+    {
+        static Dictionary<Type, NumberType> typecode = null;
+        public static NumberType GetTypeCode(Type type)
+        {
+            if (typecode == null)
+            {
+                typecode = new Dictionary<Type, NumberType>();
+                //typecode[null] = 0;
+                typecode[typeof(bool)] = NumberType.BOOL;
+                typecode[typeof(sbyte)] = NumberType.SBYTE;
+                typecode[typeof(byte)] = NumberType.BYTE;
+                typecode[typeof(Int16)] = NumberType.INT16;
+                typecode[typeof(UInt16)] = NumberType.UINT16;
+                typecode[typeof(Int32)] = NumberType.INT32;
+                typecode[typeof(UInt32)] = NumberType.UINT32;
+                typecode[typeof(Int64)] = NumberType.INT64;
+                typecode[typeof(UInt64)] = NumberType.UINT64;
+                typecode[typeof(float)] = NumberType.FLOAT;
+                typecode[typeof(double)] = NumberType.DOUBLE;
+                typecode[typeof(IntPtr)] = NumberType.INTPTR;
+                typecode[typeof(UIntPtr)] = NumberType.UINTPTR;
+                typecode[typeof(decimal)] = NumberType.DECIMAL;
+                typecode[typeof(char)] = NumberType.CHAR;
+
+            }
+            if (type.IsEnum) return NumberType.ENUM;
+            NumberType t = NumberType.IsNotNumber;
+            typecode.TryGetValue(type, out t);
+            return t;
+        }
+        ////valuetype
+        //        public NumberType TypeOnDef;
+        //        public NumberOnStack TypeOnStack;
+        //        public IBox box;
+        //public static IBox Make(ICLRType type)
+        //{
+        //    return Make(type.TypeForSystem);
+
+        //}
+        public static VBox MakeVBox(ICLRType type)
+        {
+            if (type == null) return null;
+            return MakeVBox(type.TypeForSystem);
+        }
+        //public static IBox MakeBool(bool b)
+        //{
+        //    BoxInt32 box = Make(NumberType.BOOL) as BoxInt32;
+        //    box.value = b ? 1 : 0;
+        //    return box;
+        //}
+        public static VBox MakeVBoxBool(bool b)
+        {
+            VBox box = MakeVBox(NumberType.BOOL);
+            box.v32 = b ? 1 : 0;
+            return box;
+        }
+        //public static IBox Make(System.Type type)
+        //{
+        //    NumberType code = GetTypeCode(type);
+        //    return Make(code);
+        //}
+
+        public static VBox MakeVBox(System.Type type)
+        {
+            NumberType code = GetTypeCode(type);
+            return MakeVBox(code);
+        }
+        //public static IBox Make(NumberType code)
+        //{
+
+        //    switch (code)
+        //    {
+        //        case NumberType.BOOL:
+        //        case NumberType.SBYTE:
+        //        case NumberType.BYTE:
+        //        case NumberType.CHAR:
+        //        case NumberType.INT16:
+        //        case NumberType.UINT16:
+        //        case NumberType.INT32:
+        //        case NumberType.UINT32:
+        //            if (unusedInt32.Count > 0)
+        //            {
+        //                var b = unusedInt32.Dequeue();
+        //                b.type = code;
+        //                return b;
+        //            }
+        //            else
+        //                return new BoxInt32(code);
+        //        case NumberType.INT64:
+        //        case NumberType.UINT64:
+        //            if (unusedInt64.Count > 0)
+        //            {
+        //                var b = unusedInt64.Dequeue();
+        //                b.type = code;
+        //                return b;
+        //            }
+        //            else
+        //                return new BoxInt64(code);
+        //        case NumberType.FLOAT:
+        //        case NumberType.DOUBLE:
+        //            if (unusedIntFL.Count > 0)
+        //            {
+        //                var b = unusedIntFL.Dequeue();
+        //                b.type = code;
+        //                return b;
+        //            }
+        //            else
+        //                return new BoxDouble(code);
+        //        default:
+        //            return null;
+        //    }
+
+        //}
+        public static VBox MakeVBox(NumberType code)
+        {
+
+            if (unusedVBox == null)
+                unusedVBox = new Queue<VBox>();
+            switch (code)
+            {
+                case NumberType.BOOL:
+                case NumberType.SBYTE:
+                case NumberType.BYTE:
+                case NumberType.CHAR:
+                case NumberType.INT16:
+                case NumberType.UINT16:
+                case NumberType.INT32:
+                case NumberType.UINT32:
+                case NumberType.ENUM:
+                    if (unusedVBox.Count > 0)
+                    {
+                        var b = unusedVBox.Dequeue();
+                        b.typeStack = NumberOnStack.Int32;
+                        b.type = code;
+                        b.unuse = false;
+                        return b;
+                    }
+                    return new VBox(NumberOnStack.Int32, code);
+                case NumberType.INT64:
+                case NumberType.UINT64:
+                    if (unusedVBox.Count > 0)
+                    {
+                        var b = unusedVBox.Dequeue();
+                        b.typeStack = NumberOnStack.Int64;
+                        b.type = code;
+                        b.unuse = false;
+                        return b;
+                    }
+                    return new VBox(NumberOnStack.Int64, code);
+                case NumberType.FLOAT:
+                case NumberType.DOUBLE:
+                    if (unusedVBox.Count > 0)
+                    {
+                        var b = unusedVBox.Dequeue();
+                        b.typeStack = NumberOnStack.Double;
+                        b.type = code;
+                        b.unuse = false;
+                        return b;
+                    }
+                    return new VBox(NumberOnStack.Double, code);
+                default:
+                    return null;
+            }
+
+        }
+        //public static IBox Convert(IBox box, NumberType type)
+        //{
+        //    switch (type)
+        //    {
+        //        case NumberType.BOOL:
+        //        case NumberType.SBYTE:
+        //        case NumberType.BYTE:
+        //        case NumberType.CHAR:
+        //        case NumberType.INT16:
+        //        case NumberType.UINT16:
+        //        case NumberType.INT32:
+        //        case NumberType.UINT32:
+        //            {
+        //                if (box is BoxInt32) return box;
+        //                BoxInt32 v32 = ValueOnStack.Make(type) as BoxInt32;
+        //                BoxInt64 b64 = box as BoxInt64;
+        //                BoxDouble bdb = box as BoxDouble;
+        //                if (b64 != null)
+        //                    v32.value = (int)b64.value;
+        //                else
+        //                    v32.value = (int)bdb.value;
+        //                return v32;
+        //            }
+        //        case NumberType.INT64:
+        //        case NumberType.UINT64:
+        //            {
+        //                if (box is BoxInt64) return box;
+        //                BoxInt64 v64 = ValueOnStack.Make(type) as BoxInt64;
+        //                BoxInt32 b32 = box as BoxInt32;
+        //                BoxDouble bdb = box as BoxDouble;
+        //                if (b32 != null)
+        //                    v64.value = b32.value;
+        //                else
+        //                    v64.value = (Int64)bdb.value;
+        //                return v64;
+        //            }
+        //        case NumberType.FLOAT:
+        //        case NumberType.DOUBLE:
+        //            {
+        //                if (box is BoxDouble) return box;
+        //                BoxDouble vdb = new BoxDouble(type);
+        //                BoxInt32 b32 = box as BoxInt32;
+        //                BoxInt64 b64 = box as BoxInt64;
+        //                if (b32 != null)
+        //                    vdb.value = b32.value;
+        //                else
+        //                    vdb.value = b64.value;
+        //                return vdb;
+        //            }
+        //        default:
+        //            return null;
+        //    }
+        //}
+
+        public static VBox Convert(VBox box, NumberType type)
+        {
+            VBox b = MakeVBox(type);
+            b.Set(box);
+            return b;
+        }
+        //public static Queue<IBox> unusedInt32 = new Queue<IBox>();
+        //public static Queue<IBox> unusedInt64 = new Queue<IBox>();
+        //public static Queue<IBox> unusedIntFL = new Queue<IBox>();
+
+        //[ThreadStatic]
+        //public static Queue<VBox> unusedVBox = new Queue<VBox>();//引以为戒,这个初始化对tlb没用,其他线程还是null
+
+        [ThreadStatic]
+        public static Queue<VBox> unusedVBox = null;
+        public static void UnUse(VBox box)
+        {
+            if (box == null) return;
+            if (box.unuse)
+                return;
+            box.unuse = true;
+            if (unusedVBox == null)
+                unusedVBox = new Queue<VBox>();
+            //box.refcount = 0;
+            unusedVBox.Enqueue(box);
+        }
+        //public static void UnUse(IBox box)
+        //{
+        //    switch (box.typeStack)
+        //    {
+        //        case NumberOnStack.Int32:
+        //            unusedInt32.Enqueue(box);
+        //            break;
+        //        case NumberOnStack.Int64:
+        //            unusedInt64.Enqueue(box);
+        //            break;
+        //        case NumberOnStack.Double:
+        //            unusedIntFL.Enqueue(box);
+        //            break;
+        //    }
+        //}
+    }
+    public enum NumberType
+    {
+        IsNotNumber = 0,
+        SBYTE = 1,
+        BYTE = 2,
+        INT16 = 3,
+        UINT16 = 4,
+        INT32 = 5,
+        UINT32 = 6,
+        INT64 = 7,
+        UINT64 = 8,
+        FLOAT = 9,
+        DOUBLE = 10,
+        INTPTR = 11,
+        UINTPTR = 12,
+        DECIMAL = 13,
+        CHAR = 14,
+        BOOL = 15,
+        ENUM = 16,
+    };
+    public enum NumberOnStack
+    {
+        Int32,
+        Int64,
+        Double,
+    }
+    public class VBox
+    {
+        public bool unuse = false;
+
+        public static int newcount=0;
+        public VBox(NumberOnStack typeStack, NumberType thistype)
+        {
+            this.typeStack = typeStack;
+            this.type = thistype;
+            newcount++;
+        }
+        public VBox Clone()
+        {
+            VBox b = ValueOnStack.MakeVBox(this.type);
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    b.v32 = this.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    b.v64 = this.v64;
+                    break;
+                case NumberOnStack.Double:
+                    b.vDF = this.vDF;
+                    break;
+
+            }
+
+            return b;
+        }
+        //public int refcount = 0;
+        public NumberOnStack typeStack;
+        public NumberType type;
+        public Int32 v32;
+        public Int64 v64;
+        public Double vDF;
+        public object BoxStack()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32;
+                case NumberOnStack.Int64:
+                    return v64;
+                case NumberOnStack.Double:
+                    return vDF;
+                default:
+                    return null;
+            }
+
+        }
+        public object BoxDefine()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    switch (type)
+                    {
+                        case NumberType.ENUM:
+                            return v32;
+                        case NumberType.BOOL:
+                            return (v32 > 0);
+                        case NumberType.SBYTE:
+                            return (sbyte)v32;
+                        case NumberType.BYTE:
+                            return (byte)v32;
+                        case NumberType.CHAR:
+                            return (char)v32;
+                        case NumberType.INT16:
+                            return (Int16)v32;
+                        case NumberType.UINT16:
+                            return (UInt16)v32;
+                        case NumberType.INT32:
+                            return (Int32)v32;
+                        case NumberType.UINT32:
+                            return (UInt32)v32;
+                        case NumberType.INT64:
+                            return (Int64)v32;
+                        case NumberType.UINT64:
+                            return (UInt64)v32;
+                        case NumberType.FLOAT:
+                            return (float)v32;
+                        case NumberType.DOUBLE:
+                            return (double)v32;
+                        default:
+                            return null;
+                    }
+                case NumberOnStack.Int64:
+                    switch (type)
+                    {
+                        case NumberType.BOOL:
+                            return (v64 > 0);
+                        case NumberType.SBYTE:
+                            return (sbyte)v64;
+                        case NumberType.BYTE:
+                            return (byte)v64;
+                        case NumberType.CHAR:
+                            return (char)v64;
+                        case NumberType.INT16:
+                            return (Int16)v64;
+                        case NumberType.UINT16:
+                            return (UInt16)v64;
+                        case NumberType.INT32:
+                            return (Int32)v64;
+                        case NumberType.UINT32:
+                            return (UInt32)v64;
+                        case NumberType.INT64:
+                            return (Int64)v64;
+                        case NumberType.UINT64:
+                            return (UInt64)v64;
+                        case NumberType.FLOAT:
+                            return (float)v64;
+                        case NumberType.DOUBLE:
+                            return (double)v64;
+                        default:
+                            return null;
+                    }
+                case NumberOnStack.Double:
+                    switch (type)
+                    {
+                        case NumberType.BOOL:
+                            return (vDF > 0);
+                        case NumberType.SBYTE:
+                            return (sbyte)vDF;
+                        case NumberType.BYTE:
+                            return (byte)vDF;
+                        case NumberType.CHAR:
+                            return (char)vDF;
+                        case NumberType.INT16:
+                            return (Int16)vDF;
+                        case NumberType.UINT16:
+                            return (UInt16)vDF;
+                        case NumberType.INT32:
+                            return (Int32)vDF;
+                        case NumberType.UINT32:
+                            return (UInt32)vDF;
+                        case NumberType.INT64:
+                            return (Int64)vDF;
+                        case NumberType.UINT64:
+                            return (UInt64)vDF;
+                        case NumberType.FLOAT:
+                            return (float)vDF;
+                        case NumberType.DOUBLE:
+                            return (double)vDF;
+                        default:
+                            return null;
+                    }
+                default:
+                    return null;
+            }
+
+        }
+        public void And(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 &= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 &= right.v64;
+                    break;
+
+            }
+        }
+        public void Or(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 |= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 |= right.v64;
+                    break;
+
+            }
+        }
+        public void Xor(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 ^= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 ^= right.v64;
+                    break;
+
+            }
+        }
+        public void Not()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 = ~v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 = ~v64;
+                    break;
+
+            }
+        }
+        public void Add(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 += right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 += right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF += right.vDF;
+                    break;
+            }
+        }
+        public void Sub(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 -= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 -= right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF -= right.vDF;
+                    break;
+            }
+        }
+        public void Mul(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 *= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 *= right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF *= right.vDF;
+                    break;
+            }
+        }
+        public void Div(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 /= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 /= right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF /= right.vDF;
+                    break;
+            }
+        }
+        public void Neg()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 = -v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 = -v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF = -vDF;
+                    break;
+            }
+        }
+        public void Mod(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    v32 %= right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    v64 %= right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    vDF %= right.vDF;
+                    break;
+            }
+        }
+
+        //似乎Clone可以替代New系列
+        public VBox Mod_New(VBox right)
+        {
+            VBox newbox = ValueOnStack.MakeVBox(type);
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    newbox.v32 = v32 % right.v32;
+                    break;
+                case NumberOnStack.Int64:
+                    newbox.v64 = v64 % right.v64;
+                    break;
+                case NumberOnStack.Double:
+                    newbox.vDF = vDF % right.vDF;
+                    break;
+            }
+            return newbox;
+
+        }
+
+        //SetValue
+        public void SetDirect(object value)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    if (value is bool)
+                    {
+                        v32 = ((bool)value) ? 1 : 0;
+                    }
+                    else if (value is int)
+                    {
+                        v32 = (int)value;
+                    }
+                    else if(value is uint)
+                    {
+                        v32 = (int)(uint)value;
+                    }
+                    else if (value is short)
+                    {
+                        v32 = (short)value;
+                    }
+                    else if (value is UInt16)
+                    {
+                        v32 = (UInt16)value;
+                    }
+                    else if(value is char)
+                    {
+                        v32 = (char)value;
+                    }
+                    else if (value is byte)
+                    {
+                        v32 = (byte)value;
+                    }
+                    else if (value is sbyte)
+                    {
+                        v32 = (sbyte)value;
+                    }
+                    else
+                    {
+                        v32 = (int)Convert.ToDecimal(value);
+                    }
+                    break;
+                case NumberOnStack.Int64:
+                    if(value is Int64)
+                    {
+                        v64 = (Int64)value;
+                    }
+                    else if(value is UInt64)
+                    {
+                        v64 = (Int64)(UInt64)value;
+                    }
+                    else
+                    {
+                        v64 = (Int64)Convert.ToDecimal(value);
+                    }
+                   
+                    break;
+                case NumberOnStack.Double:
+                    vDF = (double)Convert.ToDecimal(value);
+                    break;
+            }
+        }
+        public void Set(VBox value)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    if (value.typeStack == typeStack)
+                        v32 = value.v32;
+                    else
+                        v32 = value.ToInt();
+                    break;
+                case NumberOnStack.Int64:
+                    if (value.typeStack == typeStack)
+                        v64 = value.v64;
+                    else
+                        v64 = value.ToInt64();
+                    break;
+                case NumberOnStack.Double:
+                    if (value.typeStack == typeStack)
+                        vDF = value.vDF;
+                    else
+                        vDF = value.ToDouble();
+                    break;
+            }
+        }
+
+
+        public bool logic_eq(VBox right)//=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 == right.v32;
+                case NumberOnStack.Int64:
+                    return v64 == right.v64;
+                case NumberOnStack.Double:
+                    return vDF == right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_ne(VBox right)//!=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 != right.v32;
+                case NumberOnStack.Int64:
+                    return v64 != right.v64;
+                case NumberOnStack.Double:
+                    return vDF != right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_ne_Un(VBox right)//!=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32 != (uint)right.v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64 != (UInt64)right.v64;
+                case NumberOnStack.Double:
+                    return vDF != right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_ge(VBox right)//>=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 >= right.v32;
+                case NumberOnStack.Int64:
+                    return v64 >= right.v64;
+                case NumberOnStack.Double:
+                    return vDF >= right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_ge_Un(VBox right)//>=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32 >= (uint)right.v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64 >= (UInt64)right.v64;
+                case NumberOnStack.Double:
+                    return vDF >= right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_le(VBox right)//<=
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 <= right.v32;
+                case NumberOnStack.Int64:
+                    return v64 <= right.v64;
+                case NumberOnStack.Double:
+                    return vDF <= right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_le_Un(VBox right)
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32 <= (uint)right.v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64 <= (UInt64)right.v64;
+                case NumberOnStack.Double:
+                    return vDF <= right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_gt(VBox right)//>
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 > right.v32;
+                case NumberOnStack.Int64:
+                    return v64 > right.v64;
+                case NumberOnStack.Double:
+                    return vDF > right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_gt_Un(VBox right)//>
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32 > (uint)right.v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64 > (UInt64)right.v64;
+                case NumberOnStack.Double:
+                    return vDF > right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_lt(VBox right)//<
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 < right.v32;
+                case NumberOnStack.Int64:
+                    return v64 < right.v64;
+                case NumberOnStack.Double:
+                    return vDF < right.vDF;
+                default:
+                    return false;
+            }
+        }
+        public bool logic_lt_Un(VBox right)//<
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32 < (uint)right.v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64 < (UInt64)right.v64;
+                case NumberOnStack.Double:
+                    return vDF < right.vDF;
+                default:
+                    return false;
+            }
+        }
+        //////////////////////
+        //To
+        public bool ToBool()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return v32 != 0;
+                case NumberOnStack.Int64:
+                    return v64 != 0;
+                default:
+                    return false;
+            }
+        }
+        public char ToChar()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (char)v32;
+                case NumberOnStack.Int64:
+                    return (char)v64;
+                case NumberOnStack.Double:
+                    return (char)vDF;
+                default:
+                    return (char)0;
+            }
+        }
+        public byte ToByte()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (byte)v32;
+                case NumberOnStack.Int64:
+                    return (byte)v64;
+                case NumberOnStack.Double:
+                    return (byte)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public sbyte ToSByte()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (sbyte)v32;
+                case NumberOnStack.Int64:
+                    return (sbyte)v64;
+                case NumberOnStack.Double:
+                    return (sbyte)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public Int16 ToInt16()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (Int16)v32;
+                case NumberOnStack.Int64:
+                    return (Int16)v64;
+                case NumberOnStack.Double:
+                    return (Int16)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public UInt16 ToUInt16()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (UInt16)v32;
+                case NumberOnStack.Int64:
+                    return (UInt16)v64;
+                case NumberOnStack.Double:
+                    return (UInt16)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public int ToInt()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (int)v32;
+                case NumberOnStack.Int64:
+                    return (int)v64;
+                case NumberOnStack.Double:
+                    return (int)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public uint ToUInt()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (uint)v32;
+                case NumberOnStack.Int64:
+                    return (uint)v64;
+                case NumberOnStack.Double:
+                    return (uint)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public Int64 ToInt64()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (Int64)v32;
+                case NumberOnStack.Int64:
+                    return (Int64)v64;
+                case NumberOnStack.Double:
+                    return (Int64)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public UInt64 ToUInt64()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (UInt64)v32;
+                case NumberOnStack.Int64:
+                    return (UInt64)v64;
+                case NumberOnStack.Double:
+                    return (UInt64)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public float ToFloat()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (float)v32;
+                case NumberOnStack.Int64:
+                    return (float)v64;
+                case NumberOnStack.Double:
+                    return (float)vDF;
+                default:
+                    return 0;
+            }
+        }
+        public double ToDouble()
+        {
+            switch (typeStack)
+            {
+                case NumberOnStack.Int32:
+                    return (double)v32;
+                case NumberOnStack.Int64:
+                    return (double)v64;
+                case NumberOnStack.Double:
+                    return (double)vDF;
+                default:
+                    return 0;
+            }
+        }
+
+
+    }
+    //public interface IBox
+    //{
+    //    object BoxStack();
+    //    object BoxDefine();
+
+    //    void Add(IBox right);
+    //    void Sub(IBox right);
+    //    void Mul(IBox right);
+    //    void Div(IBox right);
+    //    void Mod(IBox right);
+
+    //    IBox Mod_New(IBox right);
+    //    void SetDirect(object value);
+    //    void Set(IBox value);
+
+    //    NumberType type
+    //    {
+    //        get;
+    //        set;
+    //    }
+
+    //    NumberOnStack typeStack
+    //    {
+    //        get;
+    //    }
+
+    //    bool logic_eq(IBox right);//=
+    //    bool logic_ne(IBox right);//!=
+    //    bool logic_ne_Un(IBox right);//!=
+    //    bool logic_ge(IBox right);//>=
+    //    bool logic_ge_Un(IBox right);//>=
+    //    bool logic_le(IBox right);//<=
+    //    bool logic_le_Un(IBox right);
+    //    bool logic_gt(IBox right);//>
+    //    bool logic_gt_Un(IBox right);//>
+    //    bool logic_lt(IBox right);//<
+    //    bool logic_lt_Un(IBox right);//<
+
+    //    bool ToBool();
+    //    int ToInt();
+    //    uint ToUint();
+
+    //    Int64 ToInt64();
+    //    float ToFloat();
+
+    //    double ToDouble();
+
+    //    int refcount
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //}
+    //public class BoxInt32 : IBox
+    //{
+    //    public int refcount
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public BoxInt32(NumberType type)
+    //    {
+    //        this.type = type;
+    //    }
+    //    public NumberType type
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public NumberOnStack typeStack
+    //    {
+    //        get
+    //        {
+    //            return NumberOnStack.Int32;
+    //        }
+    //    }
+    //    public Int32 value;
+    //    public object BoxStack()
+    //    {
+    //        return value;
+    //    }
+
+    //    public object BoxDefine()
+    //    {
+    //        switch (type)
+    //        {
+    //            case NumberType.BOOL:
+    //                return (value > 0);
+    //            case NumberType.SBYTE:
+    //                return (sbyte)value;
+    //            case NumberType.BYTE:
+    //                return (byte)value;
+    //            case NumberType.CHAR:
+    //                return (char)value;
+    //            case NumberType.INT16:
+    //                return (Int16)value;
+    //            case NumberType.UINT16:
+    //                return (UInt16)value;
+    //            case NumberType.INT32:
+    //                return (Int32)value;
+    //            case NumberType.UINT32:
+    //                return (UInt32)value;
+    //            case NumberType.INT64:
+    //                return (Int64)value;
+    //            case NumberType.UINT64:
+    //                return (UInt64)value;
+    //            case NumberType.FLOAT:
+    //                return (float)value;
+    //            case NumberType.DOUBLE:
+    //                return (double)value;
+    //            default:
+    //                return null;
+    //        }
+
+    //    }
+
+    //    public void Set(IBox value)
+    //    {
+
+    //        this.value = (value as BoxInt32).value;
+    //    }
+    //    public void SetDirect(object value)
+    //    {
+    //        if (value is bool)
+    //        {
+    //            this.value = (bool)value ? 1 : 0;
+    //        }
+    //        else
+    //        {
+    //            this.value = (int)value;
+    //        }
+    //    }
+    //    public void Add(IBox right)
+    //    {
+    //        this.value += (right as BoxInt32).value;
+    //    }
+
+    //    public void Sub(IBox right)
+    //    {
+    //        this.value -= (right as BoxInt32).value;
+    //    }
+
+    //    public void Mul(IBox right)
+    //    {
+    //        this.value *= (right as BoxInt32).value;
+    //    }
+
+    //    public void Div(IBox right)
+    //    {
+    //        this.value /= (right as BoxInt32).value;
+    //    }
+    //    public void Mod(IBox right)
+    //    {
+    //        this.value %= (right as BoxInt32).value;
+    //    }
+
+    //    public IBox Mod_New(IBox right)
+    //    {
+    //        BoxInt32 b = ValueOnStack.Make(this.type) as BoxInt32;
+    //        b.value = this.value % (right as BoxInt32).value;
+    //        return b;
+    //    }
+
+    //    public bool logic_eq(IBox right)
+    //    {
+    //        return value == (right as BoxInt32).value;
+    //    }
+
+
+    //    public bool logic_ne(IBox right)
+    //    {
+    //        return value != (right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_ne_Un(IBox right)
+    //    {
+    //        return (UInt32)value != (UInt32)(right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_ge(IBox right)
+    //    {
+    //        return value >= (right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_ge_Un(IBox right)
+    //    {
+    //        return (UInt32)value >= (UInt32)(right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_le(IBox right)
+    //    {
+    //        return value <= (right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_le_Un(IBox right)
+    //    {
+    //        return (UInt32)value <= (UInt32)(right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_gt(IBox right)
+    //    {
+    //        return value > (right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_gt_Un(IBox right)
+    //    {
+    //        return (UInt32)value > (UInt32)(right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_lt(IBox right)
+    //    {
+    //        return value < (right as BoxInt32).value;
+    //    }
+
+    //    public bool logic_lt_Un(IBox right)
+    //    {
+    //        return (UInt32)value < (UInt32)(right as BoxInt32).value;
+    //    }
+
+    //    public bool ToBool()
+    //    {
+    //        return value > 0;
+    //    }
+    //    public int ToInt()
+    //    {
+    //        return (int)value;
+    //    }
+    //    public uint ToUint()
+    //    {
+    //        return (uint)value;
+    //    }
+    //    public Int64 ToInt64()
+    //    {
+    //        return (Int64)value;
+    //    }
+    //    public float ToFloat()
+    //    {
+    //        return (float)value;
+    //    }
+
+    //    public double ToDouble()
+    //    {
+    //        return (double)value;
+    //    }
+    //}
+    //public class BoxInt64 : IBox
+    //{
+    //    public int refcount
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public BoxInt64(NumberType type)
+    //    {
+    //        this.type = type;
+    //    }
+    //    public NumberType type
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public NumberOnStack typeStack
+    //    {
+    //        get
+    //        {
+    //            return NumberOnStack.Int64;
+    //        }
+    //    }
+    //    public Int64 value;
+    //    public object BoxStack()
+    //    {
+    //        return value;
+    //    }
+
+    //    public object BoxDefine()
+    //    {
+    //        switch (type)
+    //        {
+    //            case NumberType.BOOL:
+    //                return (value > 0);
+    //            case NumberType.SBYTE:
+    //                return (sbyte)value;
+    //            case NumberType.BYTE:
+    //                return (byte)value;
+    //            case NumberType.CHAR:
+    //                return (char)value;
+    //            case NumberType.INT16:
+    //                return (Int16)value;
+    //            case NumberType.UINT16:
+    //                return (UInt16)value;
+    //            case NumberType.INT32:
+    //                return (Int32)value;
+    //            case NumberType.UINT32:
+    //                return (UInt32)value;
+    //            case NumberType.INT64:
+    //                return (Int64)value;
+    //            case NumberType.UINT64:
+    //                return (UInt64)value;
+    //            case NumberType.FLOAT:
+    //                return (float)value;
+    //            case NumberType.DOUBLE:
+    //                return (double)value;
+    //            default:
+    //                return null;
+    //        }
+
+    //    }
+    //    public void Set(IBox value)
+    //    {
+    //        this.value = (value as BoxInt64).value;
+    //    }
+    //    public void SetDirect(object value)
+    //    {
+    //        this.value = (Int64)value;
+    //    }
+    //    public void Add(IBox right)
+    //    {
+    //        this.value += (right as BoxInt64).value;
+    //    }
+
+    //    public void Sub(IBox right)
+    //    {
+    //        this.value -= (right as BoxInt64).value;
+    //    }
+
+    //    public void Mul(IBox right)
+    //    {
+    //        this.value *= (right as BoxInt64).value;
+    //    }
+
+    //    public void Div(IBox right)
+    //    {
+    //        this.value /= (right as BoxInt64).value;
+    //    }
+    //    public void Mod(IBox right)
+    //    {
+    //        this.value %= (right as BoxInt64).value;
+    //    }
+    //    public IBox Mod_New(IBox right)
+    //    {
+    //        BoxInt64 b = ValueOnStack.Make(this.type) as BoxInt64;
+    //        b.value = this.value % (right as BoxInt64).value;
+    //        return b;
+    //    }
+
+    //    public bool logic_eq(IBox right)
+    //    {
+    //        return value == (right as BoxInt64).value;
+    //    }
+
+
+    //    public bool logic_ne(IBox right)
+    //    {
+    //        return value != (right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_ne_Un(IBox right)
+    //    {
+    //        return (UInt64)value != (UInt64)(right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_ge(IBox right)
+    //    {
+    //        return value >= (right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_ge_Un(IBox right)
+    //    {
+    //        return (UInt64)value >= (UInt64)(right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_le(IBox right)
+    //    {
+    //        return value <= (right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_le_Un(IBox right)
+    //    {
+    //        return (UInt64)value <= (UInt64)(right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_gt(IBox right)
+    //    {
+    //        return value > (right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_gt_Un(IBox right)
+    //    {
+    //        return (UInt64)value > (UInt64)(right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_lt(IBox right)
+    //    {
+    //        return value < (right as BoxInt64).value;
+    //    }
+
+    //    public bool logic_lt_Un(IBox right)
+    //    {
+    //        return (UInt64)value < (UInt64)(right as BoxInt64).value;
+    //    }
+    //    public bool ToBool()
+    //    {
+    //        return value > 0;
+    //    }
+    //    public int ToInt()
+    //    {
+    //        return (int)value;
+    //    }
+    //    public uint ToUint()
+    //    {
+    //        return (uint)value;
+    //    }
+    //    public Int64 ToInt64()
+    //    {
+    //        return (Int64)value;
+    //    }
+    //    public float ToFloat()
+    //    {
+    //        return (float)value;
+    //    }
+
+    //    public double ToDouble()
+    //    {
+    //        return (double)value;
+    //    }
+    //}
+    //public class BoxDouble : IBox
+    //{
+    //    public int refcount
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public BoxDouble(NumberType type)
+    //    {
+    //        this.type = type;
+    //    }
+    //    public NumberType type
+    //    {
+    //        get;
+    //        set;
+    //    }
+    //    public NumberOnStack typeStack
+    //    {
+    //        get
+    //        {
+    //            return NumberOnStack.Double;
+    //        }
+    //    }
+    //    public double value;
+    //    public object BoxStack()
+    //    {
+    //        return value;
+    //    }
+
+    //    public object BoxDefine()
+    //    {
+    //        switch (type)
+    //        {
+    //            case NumberType.BOOL:
+    //                return (value > 0);
+    //            case NumberType.SBYTE:
+    //                return (sbyte)value;
+    //            case NumberType.BYTE:
+    //                return (byte)value;
+    //            case NumberType.CHAR:
+    //                return (char)value;
+    //            case NumberType.INT16:
+    //                return (Int16)value;
+    //            case NumberType.UINT16:
+    //                return (UInt16)value;
+    //            case NumberType.INT32:
+    //                return (Int32)value;
+    //            case NumberType.UINT32:
+    //                return (UInt32)value;
+    //            case NumberType.INT64:
+    //                return (Int64)value;
+    //            case NumberType.UINT64:
+    //                return (UInt64)value;
+    //            case NumberType.FLOAT:
+    //                return (float)value;
+    //            case NumberType.DOUBLE:
+    //                return (double)value;
+    //            default:
+    //                return null;
+    //        }
+
+    //    }
+
+    //    public void Set(IBox value)
+    //    {
+    //        this.value = (value as BoxDouble).value;
+    //    }
+    //    public void SetDirect(object value)
+    //    {
+
+    //        this.value = (double)Convert.ToDecimal(value);
+    //    }
+    //    public void Add(IBox right)
+    //    {
+    //        this.value += (right as BoxDouble).value;
+    //    }
+
+    //    public void Sub(IBox right)
+    //    {
+    //        this.value -= (right as BoxDouble).value;
+    //    }
+
+    //    public void Mul(IBox right)
+    //    {
+    //        this.value *= (right as BoxDouble).value;
+    //    }
+
+    //    public void Div(IBox right)
+    //    {
+    //        this.value /= (right as BoxDouble).value;
+    //    }
+    //    public void Mod(IBox right)
+    //    {
+    //        this.value %= (right as BoxDouble).value;
+    //    }
+
+    //    public IBox Mod_New(IBox right)
+    //    {
+    //        BoxDouble b = new BoxDouble(this.type);
+    //        b.value = this.value % (right as BoxDouble).value;
+    //        return b;
+    //    }
+
+    //    public bool logic_eq(IBox right)
+    //    {
+    //        return value == (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_ne(IBox right)
+    //    {
+    //        return value != (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_ne_Un(IBox right)
+    //    {
+    //        return value != (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_ge(IBox right)
+    //    {
+    //        return value >= (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_ge_Un(IBox right)
+    //    {
+    //        return value >= (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_le(IBox right)
+    //    {
+    //        return value <= (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_le_Un(IBox right)
+    //    {
+    //        return value <= (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_gt(IBox right)
+    //    {
+    //        return value > (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_gt_Un(IBox right)
+    //    {
+    //        return value > (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_lt(IBox right)
+    //    {
+    //        return value < (right as BoxDouble).value;
+    //    }
+
+    //    public bool logic_lt_Un(IBox right)
+    //    {
+    //        return value < (right as BoxDouble).value;
+    //    }
+    //    public bool ToBool()
+    //    {
+    //        throw new NotImplementedException();
+    //    }
+    //    public int ToInt()
+    //    {
+    //        return (int)value;
+    //    }
+    //    public uint ToUint()
+    //    {
+    //        return (uint)value;
+    //    }
+    //    public Int64 ToInt64()
+    //    {
+    //        return (Int64)value;
+    //    }
+    //    public float ToFloat()
+    //    {
+    //        return (float)value;
+    //    }
+
+    //    public double ToDouble()
+    //    {
+    //        return (double)value;
+    //    }
+    //}
+
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Execute/ValueOnStack.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Execute/ValueOnStack.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: bf8480ca798060c47b525f46f4e04b13
+guid: 3ce3551611051c440a4f92790307a06c
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Interface.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c5405d6238436f044a9f5f24c288d548
+guid: a7543e4f61e3ad842bf75e84d8f10f49
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 50 - 50
Unity/Assets/Plugins/CLRSharp/Interface/EnvAndLog.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface/EnvAndLog.cs

@@ -1,50 +1,50 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public interface ICLRSharp_Logger
-    {
-        void Log(string str);
-        void Log_Warning(string str);
-        void Log_Error(string str);
-    }
-    public interface ICLRSharp_Environment
-    {
-        string version
-        {
-            get;
-        }
-        void LoadModule(System.IO.Stream dllStream);
-
-        void LoadModule(System.IO.Stream dllStream, System.IO.Stream pdbStream, Mono.Cecil.Cil.ISymbolReaderProvider debugInfoLoader);
-
-        ////仅仅加载模块的名字和他引用的模块名字
-        //void LoadModule_OnlyName(System.IO.Stream dllStream);
-
-        void AddSerachAssembly(System.Reflection.Assembly assembly);
-        string[] GetAllTypes();
-        ICLRType GetType(string name);
-
-        string[] GetModuleRefNames();
-        ICLRType GetType(System.Type systemType);
-
-        void RegType(ICLRType type);
-        ICLRSharp_Logger logger
-        {
-            get;
-        }
-
-        void RegCrossBind(ICrossBind bind);
-
-        ICrossBind GetCrossBind(Type type);
-
-    }
-    public interface ICrossBind
-    {
-        Type Type
-        { get; }
-        object CreateBind(CLRSharp_Instance inst);
-    }
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public interface ICLRSharp_Logger
+    {
+        void Log(string str);
+        void Log_Warning(string str);
+        void Log_Error(string str);
+    }
+    public interface ICLRSharp_Environment
+    {
+        string version
+        {
+            get;
+        }
+        void LoadModule(System.IO.Stream dllStream);
+
+        void LoadModule(System.IO.Stream dllStream, System.IO.Stream pdbStream, Mono.Cecil.Cil.ISymbolReaderProvider debugInfoLoader);
+
+        ////仅仅加载模块的名字和他引用的模块名字
+        //void LoadModule_OnlyName(System.IO.Stream dllStream);
+
+        void AddSerachAssembly(System.Reflection.Assembly assembly);
+        string[] GetAllTypes();
+        ICLRType GetType(string name);
+
+        string[] GetModuleRefNames();
+        ICLRType GetType(System.Type systemType);
+
+        void RegType(ICLRType type);
+        ICLRSharp_Logger logger
+        {
+            get;
+        }
+
+        void RegCrossBind(ICrossBind bind);
+
+        ICrossBind GetCrossBind(Type type);
+
+    }
+    public interface ICrossBind
+    {
+        Type Type
+        { get; }
+        object CreateBind(CLRSharp_Instance inst);
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Interface/EnvAndLog.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Interface/EnvAndLog.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 87e482e4f83ce3344893b345aa17e533
+guid: acd4794f09421a44e9cf756c8b7ce256
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: bc8d44c195b6e364e80bfd4c9f67f1f8
+guid: 6f034f9e8f048bb4ca7337e4a84c514b
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/CLRSharp.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 065ecdaed08ce604e914f1ab76b84251
+guid: 86eac08f62847994eaf4c2787670380f
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 39 - 39
Unity/Assets/Plugins/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs

@@ -1,39 +1,39 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public class CLRSharp_Instance
-    {
-        public ICLRType_Sharp type
-        {
-            get;
-            private set;
-        }
-        public CLRSharp_Instance(ICLRType_Sharp type)
-        {
-            this.type = type;
-        }
-        public object system_base;
-        public Dictionary<string, object> Fields = new Dictionary<string, object>();
-
-        //每个方法都可以产生一个代理
-        public Dictionary<IMethod, Delegate> Delegates = new Dictionary<IMethod, Delegate>();
-
-        public Delegate GetDelegate(ThreadContext context, Type deleType, IMethod method)
-        {
-            Delegate dele = null;
-            if (!Delegates.TryGetValue(method, out dele))
-            {
-                dele = Delegate_Binder.MakeDelegate(deleType,  this, method);
-                Delegates[method] = dele;
-                //需要从Delegate转换成实际类型赋值的帮助类
-
-
-            }
-            return dele;
-        }
-    }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public class CLRSharp_Instance
+    {
+        public ICLRType_Sharp type
+        {
+            get;
+            private set;
+        }
+        public CLRSharp_Instance(ICLRType_Sharp type)
+        {
+            this.type = type;
+        }
+        public object system_base;
+        public Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+        //每个方法都可以产生一个代理
+        public Dictionary<IMethod, Delegate> Delegates = new Dictionary<IMethod, Delegate>();
+
+        public Delegate GetDelegate(ThreadContext context, Type deleType, IMethod method)
+        {
+            Delegate dele = null;
+            if (!Delegates.TryGetValue(method, out dele))
+            {
+                dele = Delegate_Binder.MakeDelegate(deleType,  this, method);
+                Delegates[method] = dele;
+                //需要从Delegate转换成实际类型赋值的帮助类
+
+
+            }
+            return dele;
+        }
+    }
+
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Instance.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 3b1b1890eba3f7c4ea8e6112b53eaba9
+guid: da7073d46c0d54d4d9ffc52de3411661
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 630 - 439
Unity/Assets/Plugins/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs

@@ -1,439 +1,630 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public class Type_Common_CLRSharp : ICLRType_Sharp
-    {
-        public System.Type TypeForSystem
-        {
-            get
-            {
-                return typeof(CLRSharp_Instance);
-            }
-        }
-        public Mono.Cecil.TypeDefinition type_CLRSharp
-        {
-            get;
-            private set;
-        }
-        public ICLRSharp_Environment env
-        {
-            get;
-            private set;
-        }
-        public ICLRType[] SubTypes
-        {
-            get;
-            private set;
-        }
-        public ICLRType BaseType
-        {
-            get;
-            private set;
-        }
-        public List<ICLRType> _Interfaces = null;
-
-        public bool ContainBase(Type t)
-        {
-            if (BaseType != null && BaseType.TypeForSystem == t) return true;
-            if (_Interfaces == null) return false;
-            foreach (var i in _Interfaces)
-            {
-                if (i.TypeForSystem == t) return true;
-            }
-            return false;
-        }
-        public bool HasSysBase
-        {
-            get;
-            private set;
-        }
-        public string[] GetMethodNames()
-        {
-            string[] t = new string[type_CLRSharp.Methods.Count];
-            for (int i = 0; i < type_CLRSharp.Methods.Count; i++)
-            {
-                t[i] = type_CLRSharp.Methods[i].Name;
-            }
-            return t;
-        }
-        public Type_Common_CLRSharp(ICLRSharp_Environment env, Mono.Cecil.TypeDefinition type)
-        {
-            this.env = env;
-            this.type_CLRSharp = type;
-            if (type_CLRSharp.BaseType != null)
-            {
-                BaseType = env.GetType(type_CLRSharp.BaseType.FullName);
-                if (BaseType is ICLRType_System)
-                {
-                    if (BaseType.TypeForSystem == typeof(object))
-                    {//都是这样,无所谓
-                        BaseType = null;
-                    }
-                    else
-                    {//继承了其他系统类型
-                        env.logger.Log("ScriptType:" + Name + " Based On a SystemType:" + BaseType.Name);
-                        HasSysBase = true;
-                    }
-                }
-                if (type_CLRSharp.HasInterfaces)
-                {
-                    _Interfaces = new List<ICLRType>();
-                    foreach (var i in type_CLRSharp.Interfaces)
-                    {
-                        var itype = env.GetType(i.FullName);
-                        if (itype is ICLRType_System)
-                        {
-                            //继承了其他系统类型
-                            env.logger.Log("ScriptType:" + Name + " Based On a SystemType:" + itype.Name);
-                            HasSysBase = true;
-                        }
-                        _Interfaces.Add(itype);
-                    }
-                }
-            }
-            foreach (var m in this.type_CLRSharp.Methods)
-            {
-                if (m.Name == ".cctor")
-                {
-                    NeedCCtor = true;
-                    break;
-                }
-            }
-
-        }
-        public IMethod GetVMethod(IMethod _base)
-        {
-            IMethod _method = null;
-            ICLRType_Sharp type = this;
-            while (type != _base.DeclaringType && type != null)
-            {
-                _method = type.GetMethod(_base.Name, _base.ParamList);
-                if (_method != null)
-                    return _method;
-                type = env.GetType(type.type_CLRSharp.BaseType.FullName) as ICLRType_Sharp;
-            }
-            return _base;
-
-        }
-        public void ResetStaticInstace()
-        {
-            this._staticInstance = null;
-            foreach (var m in this.type_CLRSharp.Methods)
-            {
-                if (m.Name == ".cctor")
-                {
-                    NeedCCtor = true;
-                    break;
-                }
-            }
-
-        }
-        public string Name
-        {
-            get { return type_CLRSharp.Name; }
-        }
-
-        public string FullName
-        {
-            get { return type_CLRSharp.FullName; }
-        }
-        public string FullNameWithAssembly
-        {
-            get
-            {
-                return type_CLRSharp.FullName;// +"," + type_CLRSharp.Module.Name;
-            }
-        }
-        public IMethod GetMethod(string funcname, MethodParamList types)
-        {
-            if (type_CLRSharp.HasMethods)
-            {
-                foreach (var m in type_CLRSharp.Methods)
-                {
-                    if (m.Name != funcname) continue;
-                    if ((types == null) ? !m.HasParameters : (m.Parameters.Count == types.Count))
-                    {
-                        bool match = true;
-                        for (int i = 0; i < ((types == null) ? 0 : types.Count); i++)
-                        {
-                            if (env.GetType(m.Parameters[i].ParameterType.FullName) != types[i])
-                            {
-                                match = false;
-                                break;
-                            }
-                        }
-                        if (match)
-                            return new Method_Common_CLRSharp(this, m);
-                    }
-                }
-            }
-            return null;
-        }
-        public object InitObj()
-        {
-            return new CLRSharp_Instance(this);
-        }
-        public IMethod GetMethodT(string funcname, MethodParamList ttypes, MethodParamList types)
-        {
-            return null;
-        }
-        public IField GetField(string name)
-        {
-            foreach (var f in type_CLRSharp.Fields)
-            {
-                if (f.Name == name)
-                {
-                    return new Field_Common_CLRSharp(this, f);
-                }
-            }
-            return null;
-        }
-        public bool IsInst(object obj)
-        {
-            if (obj is CLRSharp_Instance)
-            {
-                CLRSharp_Instance ins = obj as CLRSharp_Instance;
-                if (ins.type == this)
-                {
-                    return true;
-                }
-                //这里还要实现继承关系
-            }
-            return false;
-
-        }
-
-        public ICLRType GetNestType(ICLRSharp_Environment env, string fullname)
-        {
-            foreach (var stype in type_CLRSharp.NestedTypes)
-            {
-                if (stype.Name == fullname)
-                {
-                    var itype = new Type_Common_CLRSharp(env, stype);
-                    env.RegType(itype);
-                    return itype;
-                }
-            }
-            return null;
-        }
-
-        CLRSharp_Instance _staticInstance = null;
-        public CLRSharp_Instance staticInstance
-        {
-            get
-            {
-                if (_staticInstance == null)
-                    _staticInstance = new CLRSharp_Instance(this);
-                return _staticInstance;
-            }
-        }
-
-        public bool NeedCCtor
-        {
-            get;
-            private set;
-        }
-        public void InvokeCCtor(ThreadContext context)
-        {
-            NeedCCtor = false;
-            this.GetMethod(".cctor", null).Invoke(context, this.staticInstance, new object[] { });
-
-        }
-
-
-        public string[] GetFieldNames()
-        {
-            string[] abc = new string[type_CLRSharp.Fields.Count];
-            for (int i = 0; i < type_CLRSharp.Fields.Count; i++)
-            {
-                abc[i] = type_CLRSharp.Fields[i].Name;
-            }
-            return abc;
-        }
-    }
-    public class Method_Common_CLRSharp : IMethod_Sharp
-    {
-        Type_Common_CLRSharp _DeclaringType;
-
-        public Method_Common_CLRSharp(Type_Common_CLRSharp type, Mono.Cecil.MethodDefinition method)
-        {
-
-            if (method == null)
-                throw new Exception("not allow null method.");
-            this._DeclaringType = type;
-
-            method_CLRSharp = method;
-            ReturnType = type.env.GetType(method.ReturnType.FullName);
-
-            ParamList = new MethodParamList(type.env, method);
-        }
-        public string Name
-        {
-            get
-            {
-                return method_CLRSharp.Name;
-
-            }
-        }
-
-        public bool isStatic
-        {
-            get
-            {
-                return method_CLRSharp.IsStatic;
-            }
-        }
-        public ICLRType DeclaringType
-        {
-            get
-            {
-                return _DeclaringType;
-            }
-        }
-        public ICLRType ReturnType
-        {
-            get;
-            private set;
-
-
-        }
-        public MethodParamList ParamList
-        {
-            get;
-            private set;
-        }
-        public Mono.Cecil.MethodDefinition method_CLRSharp;
-        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
-        {
-            if (context == null)
-                context = ThreadContext.activeContext;
-            if (context == null)
-                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
-            if (bVisual && method_CLRSharp.IsVirtual)
-            {
-                CLRSharp_Instance inst = _this as CLRSharp_Instance;
-                if (inst.type != this.DeclaringType)
-                {
-                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
-                    if (impl != this)
-                    {
-                        return impl.Invoke(context, _this, _params);
-                    }
-                }
-            }
-            if (method_CLRSharp.Name == ".ctor")
-            {
-                CLRSharp_Instance inst = _this as CLRSharp_Instance;
-                if (inst == null)
-                    inst = new CLRSharp_Instance(_DeclaringType);
-
-                //if (_DeclaringType.BaseType is ICLRType_System)
-                context.ExecuteFunc(this, inst, _params);
-                return inst;
-            }
-            return context.ExecuteFunc(this, _this, _params);
-        }
-        public object Invoke(ThreadContext context, object _this, object[] _params)
-        {
-            return Invoke(context, _this, _params, true);
-        }
-        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual, bool autoLogDump)
-        {
-            try
-            {
-                return Invoke(context, _this, _params, bVisual);
-            }
-            catch (Exception err)
-            {
-                if (context == null) context = ThreadContext.activeContext;
-                if (context == null)
-                    throw new Exception("当前线程没有创建ThreadContext,无法Dump", err);
-                else
-                {
-                    context.environment.logger.Log_Error(context.Dump());
-                    throw err;
-                }
-            }
-        }
-
-        CodeBody _body = null;
-        public CodeBody body
-        {
-            get
-            {
-                if (_body == null)
-                {
-                    if (!method_CLRSharp.HasBody)
-                        return null;
-                    _body = (this.DeclaringType.env as CLRSharp_Environment).CreateCodeBody(this);
-                }
-                return _body;
-            }
-
-        }
-    }
-
-    public class Field_Common_CLRSharp : IField
-    {
-        public Type_Common_CLRSharp _DeclaringType;
-        public Mono.Cecil.FieldDefinition field;
-        public Field_Common_CLRSharp(Type_Common_CLRSharp type, Mono.Cecil.FieldDefinition field)
-        {
-            this.field = field;
-            this.FieldType = type.env.GetType(field.FieldType.FullName);
-            this._DeclaringType = type;
-
-        }
-        public ICLRType FieldType
-        {
-            get;
-            private set;
-        }
-        public ICLRType DeclaringType
-        {
-            get
-            {
-                return _DeclaringType;
-            }
-        }
-        public void Set(object _this, object value)
-        {
-            CLRSharp_Instance sins = null;
-            if (_this == null)
-            {
-                sins = _DeclaringType.staticInstance;
-            }
-            else
-            {
-                sins = _this as CLRSharp_Instance;
-            }
-
-
-            sins.Fields[field.Name] = value;
-        }
-
-        public object Get(object _this)
-        {
-            CLRSharp_Instance sins = null;
-            if (_this == null)
-            {
-                sins = _DeclaringType.staticInstance;
-            }
-            else
-            {
-                sins = _this as CLRSharp_Instance;
-            }
-            object v = null;
-            sins.Fields.TryGetValue(field.Name, out v);
-            return v;
-        }
-
-        public bool isStatic
-        {
-            get { return this.field.IsStatic; }
-        }
-    }
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public class Type_Common_CLRSharp : ICLRType_Sharp
+    {
+        public System.Type TypeForSystem
+        {
+            get
+            {
+                if (_isenum)
+                {
+                    return typeof(int);
+                }
+                return typeof(CLRSharp_Instance);
+            }
+        }
+        public Mono.Cecil.TypeDefinition type_CLRSharp
+        {
+            get;
+            private set;
+        }
+        public ICLRSharp_Environment env
+        {
+            get;
+            private set;
+        }
+        public ICLRType[] SubTypes
+        {
+            get;
+            private set;
+        }
+        public ICLRType BaseType
+        {
+            get;
+            private set;
+        }
+        public List<ICLRType> _Interfaces = null;
+
+        public bool ContainBase(Type t)
+        {
+            if (BaseType != null && BaseType.TypeForSystem == t) return true;
+            if (_Interfaces == null) return false;
+            foreach (var i in _Interfaces)
+            {
+                if (i.TypeForSystem == t) return true;
+            }
+            return false;
+        }
+        public bool HasSysBase
+        {
+            get;
+            private set;
+        }
+        public string[] GetMethodNames()
+        {
+            string[] t = new string[type_CLRSharp.Methods.Count];
+            for (int i = 0; i < type_CLRSharp.Methods.Count; i++)
+            {
+                t[i] = type_CLRSharp.Methods[i].Name;
+            }
+            return t;
+        }
+        public Type_Common_CLRSharp(ICLRSharp_Environment env, Mono.Cecil.TypeDefinition type)
+        {
+            this.env = env;
+            this.type_CLRSharp = type;
+            if (type.IsEnum)
+            {
+                _isenum = true;
+            }
+            if (type_CLRSharp.BaseType != null)
+            {
+                BaseType = env.GetType(type_CLRSharp.BaseType.FullName);
+                if (BaseType is ICLRType_System)
+                {
+                    if (BaseType.TypeForSystem == typeof(Enum) || BaseType.TypeForSystem == typeof(object) || BaseType.TypeForSystem == typeof(ValueType) || BaseType.TypeForSystem == typeof(System.Enum))
+                    {//都是这样,无所谓
+                        BaseType = null;
+                    }
+                    else
+                    {//继承了其他系统类型
+                        env.logger.Log_Error("ScriptType:" + Name + " Based On a SystemType:" + BaseType.Name);
+                        HasSysBase = true;
+                        throw new Exception("不得继承系统类型,脚本类型系统和脚本类型系统是隔离的");
+
+                    }
+                }
+                if (type_CLRSharp.HasInterfaces)
+                {
+                    _Interfaces = new List<ICLRType>();
+                    bool bWarning = true;
+                    foreach (var i in type_CLRSharp.Interfaces)
+                    {
+                        var itype = env.GetType(i.FullName);
+                        if (itype is ICLRType_System)
+                        {
+                            //继承了其他系统类型
+                            Type ts = (itype as ICLRType_System).TypeForSystem;
+
+                            if (bWarning & env.GetCrossBind(ts) == null)
+                            {
+                               
+                                if (ts.IsInterface)
+                                {
+                                    foreach(var t in ts.GetInterfaces())
+                                    {
+                                        if(env.GetCrossBind(t)!=null)
+                                        {
+                                            bWarning = false;
+                                            break;
+                                        }
+                                    }
+                                }
+                                if (bWarning)
+                                {
+                                    env.logger.Log_Warning("警告:没有CrossBind的情况下直接继承\nScriptType:" + Name + " Based On a SystemInterface:" + itype.Name);
+                                }
+                            }
+                            HasSysBase = true;
+                        }
+                        _Interfaces.Add(itype);
+                    }
+                }
+            }
+            foreach (var m in this.type_CLRSharp.Methods)
+            {
+                if (m.Name == ".cctor")
+                {
+                    NeedCCtor = true;
+                    break;
+                }
+            }
+
+        }
+        public IMethod GetVMethod(IMethod _base)
+        {
+            IMethod _method = null;
+            ICLRType_Sharp type = this;
+            while (type != _base.DeclaringType && type != null)
+            {
+                _method = type.GetMethod(_base.Name, _base.ParamList);
+                if (_method != null)
+                    return _method;
+                type = env.GetType(type.type_CLRSharp.BaseType.FullName) as ICLRType_Sharp;
+            }
+            return _base;
+
+        }
+        public void ResetStaticInstace()
+        {
+            this._staticInstance = null;
+            foreach (var m in this.type_CLRSharp.Methods)
+            {
+                if (m.Name == ".cctor")
+                {
+                    NeedCCtor = true;
+                    break;
+                }
+            }
+
+        }
+        public string Name
+        {
+            get { return type_CLRSharp.Name; }
+        }
+
+        public string FullName
+        {
+            get { return type_CLRSharp.FullName; }
+        }
+        public string FullNameWithAssembly
+        {
+            get
+            {
+                if (_isenum)
+                {
+                    return env.GetType(typeof(int)).FullNameWithAssembly;
+                }
+                return type_CLRSharp.FullName;// +"," + type_CLRSharp.Module.Name;
+            }
+        }
+
+        public IMethod GetMethod(string funcname, MethodParamList types)
+        {
+            if (type_CLRSharp.HasMethods)
+            {
+                foreach (var m in type_CLRSharp.Methods)
+                {
+                    if (m.Name != funcname) continue;
+                    if ((types == null) ? !m.HasParameters : (m.Parameters.Count == types.Count))
+                    {
+                        bool match = true;
+                        for (int i = 0; i < ((types == null) ? 0 : types.Count); i++)
+                        {
+                            var envtype = env.GetType(m.Parameters[i].ParameterType.FullName);
+                            if (envtype.IsEnum())
+                            {
+                                if (envtype.TypeForSystem != types[i].TypeForSystem)
+                                {
+                                    match = false;
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                if (envtype != types[i])
+                                {
+                                    match = false;
+                                    break;
+                                }
+                            }
+                        }
+                        if (match)
+                            return new Method_Common_CLRSharp(this, m);
+                    }
+                }
+            }
+            return null;
+        }
+
+        public IMethod GetMethodOverloaded(string funcname, MethodParamList types)
+        {
+            Mono.Cecil.MethodDefinition minDistanceMethod = null;
+            List<int> minDistanceParameters = null;
+            
+            if (type_CLRSharp.HasMethods)
+            {
+                foreach (var m in type_CLRSharp.Methods)
+                {
+                    if (m.Name != funcname) continue;
+                    if ((types == null) ? !m.HasParameters : (m.Parameters.Count == types.Count))
+                    {
+                        bool match = true;
+                        List<int> currentDistanceParameters = new List<int>();
+                        
+                        for (int i = 0; i < ((types == null) ? 0 : types.Count); i++)
+                        {
+                            var envtype = env.GetType(m.Parameters[i].ParameterType.FullName);
+                            if (envtype.IsEnum())
+                            {
+                                if (envtype.TypeForSystem != types[i].TypeForSystem)
+                                {
+                                    match = false;
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                if (!(envtype.TypeForSystem.IsAssignableFrom(types[i].TypeForSystem))) 
+                                {
+                                    match = false;
+                                    break;
+                                }
+                                
+                                currentDistanceParameters.Add(GetInheritanceDistance(envtype.TypeForSystem, types[i].TypeForSystem));
+                                
+                            }
+                        }
+                        if (match)
+                        {
+                            if (minDistanceParameters == null) 
+                            {
+                                minDistanceMethod = m;
+                                minDistanceParameters = currentDistanceParameters;
+                            }
+                            else 
+                            {
+                                for (int i = 0; i < currentDistanceParameters.Count; i++) 
+                                {
+                                    if (currentDistanceParameters[i] < minDistanceParameters[i]) 
+                                    {
+                                        minDistanceMethod = m;
+                                        minDistanceParameters = currentDistanceParameters;
+                                    }
+                                }
+                            }
+                            
+                        }
+                    }
+                }
+                
+                if (minDistanceMethod == null) 
+                {
+                    return null;
+                }
+                return new Method_Common_CLRSharp(this, minDistanceMethod);
+            }
+            
+            return null;
+        }
+        
+        public int GetInheritanceDistance(Type baseClass, Type subClass)
+        {
+            if (baseClass == subClass) 
+            {
+                return 0;
+            }
+            if (!baseClass.IsAssignableFrom (subClass)) 
+            {
+                return int.MaxValue;
+            }
+            
+            int distance = 0;
+            while ((subClass = subClass.BaseType) != baseClass) 
+            {
+                distance++;
+            }
+            return ++distance;
+        }
+
+        public IMethod[] GetMethods(string funcname)
+        {
+            List<IMethod> methods = new List<IMethod>();
+            if (type_CLRSharp.HasMethods)
+            {
+                foreach (var m in type_CLRSharp.Methods)
+                {
+                    if (m.Name != funcname) continue;
+                    methods.Add(new Method_Common_CLRSharp(this, m));
+                }
+            }
+            return methods.ToArray();
+        }
+        public IMethod[] GetAllMethods()
+        {
+            List<IMethod> methods = new List<IMethod>();
+            if (type_CLRSharp.HasMethods)
+            {
+                foreach (var m in type_CLRSharp.Methods)
+                {
+                    methods.Add(new Method_Common_CLRSharp(this, m));
+                }
+            }
+            return methods.ToArray();
+        }
+        public object InitObj()
+        {
+            return new CLRSharp_Instance(this);
+        }
+        public IMethod GetMethodT(string funcname, MethodParamList ttypes, MethodParamList types)
+        {
+            return null;
+        }
+        public IField GetField(string name)
+        {
+            foreach (var f in type_CLRSharp.Fields)
+            {
+                if (f.Name == name)
+                {
+                    return new Field_Common_CLRSharp(this, f);
+                }
+            }
+            return null;
+        }
+        public bool IsInst(object obj)
+        {
+            if (obj is CLRSharp_Instance)
+            {
+                CLRSharp_Instance ins = obj as CLRSharp_Instance;
+                if (ins.type == this)
+                {
+                    return true;
+                }
+                //这里还要实现继承关系
+                if(ins.type is ICLRType_Sharp)
+                {
+                    Type_Common_CLRSharp sharps =ins.type as Type_Common_CLRSharp;
+                    if(sharps._Interfaces.Count>0)
+                    {
+                        foreach(var i in sharps._Interfaces)
+                        {
+                            if (i == this)
+                                return true;
+                        }
+                    }
+                }
+            }
+            return false;
+
+        }
+
+        public ICLRType GetNestType(ICLRSharp_Environment env, string fullname)
+        {
+            foreach (var stype in type_CLRSharp.NestedTypes)
+            {
+                if (stype.Name == fullname)
+                {
+                    var itype = new Type_Common_CLRSharp(env, stype);
+                    env.RegType(itype);
+                    return itype;
+                }
+            }
+            return null;
+        }
+
+        CLRSharp_Instance _staticInstance = null;
+        public CLRSharp_Instance staticInstance
+        {
+            get
+            {
+                if (_staticInstance == null)
+                    _staticInstance = new CLRSharp_Instance(this);
+                return _staticInstance;
+            }
+        }
+
+        public bool NeedCCtor
+        {
+            get;
+            private set;
+        }
+        public void InvokeCCtor(ThreadContext context)
+        {
+            NeedCCtor = false;
+            this.GetMethod(".cctor", null).Invoke(context, this.staticInstance, new object[] { });
+
+        }
+
+
+        public string[] GetFieldNames()
+        {
+            string[] abc = new string[type_CLRSharp.Fields.Count];
+            for (int i = 0; i < type_CLRSharp.Fields.Count; i++)
+            {
+                abc[i] = type_CLRSharp.Fields[i].Name;
+            }
+            return abc;
+        }
+        bool _isenum = false;
+        public bool IsEnum()
+        {
+            return _isenum;
+        }
+    }
+    public class Method_Common_CLRSharp : IMethod_Sharp
+    {
+        Type_Common_CLRSharp _DeclaringType;
+
+        public Method_Common_CLRSharp(Type_Common_CLRSharp type, Mono.Cecil.MethodDefinition method)
+        {
+
+            if (method == null)
+                throw new Exception("not allow null method.");
+            this._DeclaringType = type;
+
+            method_CLRSharp = method;
+            ReturnType = type.env.GetType(method.ReturnType.FullName);
+
+            ParamList = new MethodParamList(type.env, method);
+        }
+        public string Name
+        {
+            get
+            {
+                return method_CLRSharp.Name;
+
+            }
+        }
+
+        public bool isStatic
+        {
+            get
+            {
+                return method_CLRSharp.IsStatic;
+            }
+        }
+        public ICLRType DeclaringType
+        {
+            get
+            {
+                return _DeclaringType;
+            }
+        }
+        public ICLRType ReturnType
+        {
+            get;
+            private set;
+
+
+        }
+        public MethodParamList ParamList
+        {
+            get;
+            private set;
+        }
+        public Mono.Cecil.MethodDefinition method_CLRSharp;
+        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
+        {
+            if (context == null)
+                context = ThreadContext.activeContext;
+            if (context == null)
+                throw new Exception("这个线程上没有CLRSharp:ThreadContext");
+            if (bVisual && method_CLRSharp.IsVirtual)
+            {
+                CLRSharp_Instance inst = _this as CLRSharp_Instance;
+                if (inst.type != this.DeclaringType)
+                {
+                    IMethod impl = inst.type.GetVMethod(this);// .GetMethod(this.Name, this.ParamList);
+                    if (impl != this)
+                    {
+                        return impl.Invoke(context, _this, _params);
+                    }
+                }
+            }
+            if (method_CLRSharp.Name == ".ctor")
+            {
+                CLRSharp_Instance inst = _this as CLRSharp_Instance;
+                if (inst == null)
+                    inst = new CLRSharp_Instance(_DeclaringType);
+
+                //if (_DeclaringType.BaseType is ICLRType_System)
+                context.ExecuteFunc(this, inst, _params);
+                return inst;
+            }
+            var obj = context.ExecuteFunc(this, _this, _params);
+            if (obj is CLRSharp_Instance && ReturnType is ICLRType_System)
+            {
+                var bind = context.environment.GetCrossBind((ReturnType as ICLRType_System).TypeForSystem);
+                if (bind != null)
+                {
+                    obj = bind.CreateBind(obj as CLRSharp_Instance);
+                }
+            }
+            return obj;
+        }
+        public object Invoke(ThreadContext context, object _this, object[] _params)
+        {
+            return Invoke(context, _this, _params, true);
+        }
+        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual, bool autoLogDump)
+        {
+            try
+            {
+                return Invoke(context, _this, _params, bVisual);
+            }
+            catch (Exception err)
+            {
+                if (context == null) context = ThreadContext.activeContext;
+                if (context == null)
+                    throw new Exception("当前线程没有创建ThreadContext,无法Dump", err);
+                else
+                {
+                    context.environment.logger.Log_Error(context.Dump());
+                    throw err;
+                }
+            }
+        }
+
+        CodeBody _body = null;
+        public CodeBody body
+        {
+            get
+            {
+                if (_body == null)
+                {
+                    if (!method_CLRSharp.HasBody)
+                        return null;
+                    _body = new CodeBody(this._DeclaringType.env, this.method_CLRSharp);
+                    //(this.DeclaringType.env as CLRSharp_Environment).CreateCodeBody(this);
+                }
+                return _body;
+            }
+
+        }
+    }
+
+    public class Field_Common_CLRSharp : IField
+    {
+        public Type_Common_CLRSharp _DeclaringType;
+        public Mono.Cecil.FieldDefinition field;
+        public Field_Common_CLRSharp(Type_Common_CLRSharp type, Mono.Cecil.FieldDefinition field)
+        {
+            this.field = field;
+            this.FieldType = type.env.GetType(field.FieldType.FullName);
+            this._DeclaringType = type;
+
+        }
+        public ICLRType FieldType
+        {
+            get;
+            private set;
+        }
+        public ICLRType DeclaringType
+        {
+            get
+            {
+                return _DeclaringType;
+            }
+        }
+        public void Set(object _this, object value)
+        {
+            CLRSharp_Instance sins = null;
+            if (_this == null)
+            {
+                sins = _DeclaringType.staticInstance;
+            }
+            else
+            {
+                sins = _this as CLRSharp_Instance;
+            }
+
+
+            sins.Fields[field.Name] = value;
+        }
+
+        public object Get(object _this)
+        {
+            CLRSharp_Instance sins = null;
+            if (_this == null)
+            {
+                sins = _DeclaringType.staticInstance;
+            }
+            else
+            {
+                sins = _this as CLRSharp_Instance;
+            }
+            object v = null;
+            sins.Fields.TryGetValue(field.Name, out v);
+            return v;
+        }
+
+        public bool isStatic
+        {
+            get { return this.field.IsStatic; }
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/CLRSharp/CLRSharp_Type.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c578631288337e84cb7020b5f5a28600
+guid: ac73fba17fb55fa40a1f50559d8c8665
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/Delegate.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 247bd17dd02a9854b9edaccfe13f1e64
+guid: 64436cea59acfc346b5f468b0f209d01
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 249 - 224
Unity/Assets/Plugins/CLRSharp/Type/Delegate/Delegate_Helper.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate/Delegate_Helper.cs

@@ -1,224 +1,249 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    /// <summary>
-    /// 委托绑定
-    /// </summary>
-    public class Delegate_Binder
-    {
-        static Dictionary<Type, IDelegate_BindTool> mapBind = new Dictionary<Type, IDelegate_BindTool>();
-        public static void RegBind(Type deletype, IDelegate_BindTool bindtool)
-        {
-            mapBind[deletype] = bindtool;
-        }
-        public static Delegate MakeDelegate(Type deletype, CLRSharp_Instance __this, IMethod __method)
-        {
-            IDelegate_BindTool btool = null;
-            if (mapBind.TryGetValue(deletype, out btool))
-            {
-                return btool.CreateDele(deletype, null, __this, __method);
-            }
-            var method = deletype.GetMethod("Invoke");
-            if (__method.isStatic)
-            {
-                __this = null;
-            }
-            var pp = method.GetParameters();
-
-            if (method.ReturnType == typeof(void))
-            {
-                if (pp.Length == 0)
-                {
-                    //var gtype = typeof(Delegate_BindTool).MakeGenericType(new Type[] { });
-                    btool = new Delegate_BindTool();
-                }
-                else if (pp.Length == 1)
-                {
-                    var gtype = typeof(Delegate_BindTool<>).MakeGenericType(new Type[] { pp[0].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 2)
-                {
-                    var gtype = typeof(Delegate_BindTool<,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 3)
-                {
-                    var gtype = typeof(Delegate_BindTool<,,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 4)
-                {
-                    var gtype = typeof(Delegate_BindTool<,,,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType, pp[3].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else
-                {
-                    throw new Exception("还没有支持这么多参数的委托");
-                }
-            }
-            else
-            {
-                if (pp.Length == 0)
-                {
-                    var gtype = typeof(Delegate_BindTool_Ret<>).MakeGenericType(new Type[] { method.ReturnType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-
-                }
-                else if (pp.Length == 1)
-                {
-                    var gtype = typeof(Delegate_BindTool_Ret<,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 2)
-                {
-                    var gtype = typeof(Delegate_BindTool_Ret<,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 3)
-                {
-                    var gtype = typeof(Delegate_BindTool_Ret<,,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else if (pp.Length == 4)
-                {
-                    var gtype = typeof(Delegate_BindTool_Ret<,,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType, pp[3].ParameterType });
-                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
-                }
-                else
-                {
-                    throw new Exception("还没有支持这么多参数的委托");
-                }
-            }
-            mapBind[deletype] = btool;
-            return btool.CreateDele(deletype, null, __this, __method);
-        }
-    }
-    public interface IDelegate_BindTool
-    {
-        Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method);
-    }
-    public class Delegate_BindTool : IDelegate_BindTool
-    {
-        delegate void Action();
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = () =>
-            {
-                _method.Invoke(context, _this, new object[] { }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool<T1> : IDelegate_BindTool
-    {
-        delegate void Action(T1 p1);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (p1) =>
-            {
-                _method.Invoke(context, _this, new object[] { p1 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool<T1, T2> : IDelegate_BindTool
-    {
-        delegate void Action(T1 p1, T2 p2);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (p1, p2) =>
-            {
-                _method.Invoke(context, _this, new object[] { p1, p2 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool<T1, T2, T3> : IDelegate_BindTool
-    {
-        delegate void Action(T1 p1, T2 p2, T3 p3);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (p1, p2, p3) =>
-            {
-                _method.Invoke(context, _this, new object[] { p1, p2, p3 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool<T1, T2, T3, T4> : IDelegate_BindTool
-    {
-        delegate void Action(T1 p1, T2 p2, T3 p3, T4 p4);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (p1, p2, p3, p4) =>
-            {
-                _method.Invoke(context, _this, new object[] { p1, p2, p3, p4 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool_Ret<TRet> : IDelegate_BindTool
-    {
-        delegate TRet Action();
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = () =>
-            {
-                return (TRet)_method.Invoke(context, _this, new object[] { }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool_Ret<TRet, T1> : IDelegate_BindTool
-    {
-        delegate TRet Action(T1 p1);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (T1 p1) =>
-            {
-                return (TRet)_method.Invoke(context, _this, new object[] { p1 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool_Ret<TRet, T1, T2> : IDelegate_BindTool
-    {
-        delegate TRet Action(T1 p1, T2 p2);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (T1 p1, T2 p2) =>
-            {
-                return (TRet)_method.Invoke(context, _this, new object[] { p1, p2 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool_Ret<TRet, T1, T2, T3> : IDelegate_BindTool
-    {
-        delegate TRet Action(T1 p1, T2 p2, T3 p3);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (T1 p1, T2 p2, T3 p3) =>
-            {
-                return (TRet)_method.Invoke(context, _this, new object[] { p1, p2, p3 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-    public class Delegate_BindTool_Ret<TRet, T1, T2, T3, T4> : IDelegate_BindTool
-    {
-        delegate TRet Action(T1 p1, T2 p2, T3 p3, T4 p4);
-        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
-        {
-            Action act = (T1 p1, T2 p2, T3 p3, T4 p4) =>
-            {
-                return (TRet)_method.Invoke(context, _this, new object[] { p1, p2, p3, p4 }, true, true);
-            };
-            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
-        }
-    }
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    /// <summary>
+    /// 委托绑定
+    /// </summary>
+    public class Delegate_Binder
+    {
+        static Dictionary<Type, IDelegate_BindTool> mapBind = new Dictionary<Type, IDelegate_BindTool>();
+        public static void RegBind(Type deletype, IDelegate_BindTool bindtool)
+        {
+            mapBind[deletype] = bindtool;
+        }
+        public static Delegate MakeDelegate(Type deletype, CLRSharp_Instance _this_inst, IMethod __method)
+        {
+            IDelegate_BindTool btool = null;
+            if (mapBind.TryGetValue(deletype, out btool))
+            {
+                return btool.CreateDele(deletype, null, _this_inst, __method);
+            }
+            var method = deletype.GetMethod("Invoke");
+            if (__method.isStatic)
+            {
+                _this_inst = null;
+            }
+            var pp = method.GetParameters();
+
+            if (method.ReturnType == typeof(void))
+            {
+                if (pp.Length == 0)
+                {
+                    //var gtype = typeof(Delegate_BindTool).MakeGenericType(new Type[] { });
+                    btool = new Delegate_BindTool();
+                }
+                else if (pp.Length == 1)
+                {
+                    var gtype = typeof(Delegate_BindTool<>).MakeGenericType(new Type[] { pp[0].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 2)
+                {
+                    var gtype = typeof(Delegate_BindTool<,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 3)
+                {
+                    var gtype = typeof(Delegate_BindTool<,,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 4)
+                {
+                    var gtype = typeof(Delegate_BindTool<,,,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType, pp[3].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else
+                {
+                    throw new Exception("还没有支持这么多参数的委托");
+                }
+            }
+            else
+            {
+                if (pp.Length == 0)
+                {
+                    var gtype = typeof(Delegate_BindTool_Ret<>).MakeGenericType(new Type[] { method.ReturnType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+
+                }
+                else if (pp.Length == 1)
+                {
+                    var gtype = typeof(Delegate_BindTool_Ret<,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 2)
+                {
+                    var gtype = typeof(Delegate_BindTool_Ret<,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 3)
+                {
+                    var gtype = typeof(Delegate_BindTool_Ret<,,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else if (pp.Length == 4)
+                {
+                    var gtype = typeof(Delegate_BindTool_Ret<,,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType, pp[3].ParameterType });
+                    btool = gtype.GetConstructor(new Type[] { }).Invoke(new object[] { }) as IDelegate_BindTool;
+                }
+                else
+                {
+                    throw new Exception("还没有支持这么多参数的委托");
+                }
+            }
+            mapBind[deletype] = btool;
+            return btool.CreateDele(deletype, null, _this_inst, __method);
+        }
+    }
+    public interface IDelegate_BindTool
+    {
+        Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method);
+    }
+    public class Delegate_BindTool : IDelegate_BindTool
+    {
+        delegate void Action();
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = () =>
+            {
+                _method.Invoke(context, _this, new object[] { }, true, true);
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool<T1> : IDelegate_BindTool
+    {
+        delegate void Action(T1 p1);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (p1) =>
+            {
+                _method.Invoke(context, _this, new object[] { p1 }, true, true);
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool<T1, T2> : IDelegate_BindTool
+    {
+        delegate void Action(T1 p1, T2 p2);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (p1, p2) =>
+            {
+                _method.Invoke(context, _this, new object[] { p1, p2 }, true, true);
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool<T1, T2, T3> : IDelegate_BindTool
+    {
+        delegate void Action(T1 p1, T2 p2, T3 p3);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (p1, p2, p3) =>
+            {
+                _method.Invoke(context, _this, new object[] { p1, p2, p3 }, true, true);
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool<T1, T2, T3, T4> : IDelegate_BindTool
+    {
+        delegate void Action(T1 p1, T2 p2, T3 p3, T4 p4);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (p1, p2, p3, p4) =>
+            {
+                _method.Invoke(context, _this, new object[] { p1, p2, p3, p4 }, true, true);
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool_Ret<TRet> : IDelegate_BindTool
+    {
+        delegate TRet Action();
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = () =>
+            {
+                var o = _method.Invoke(context, _this, new object[] { }, true, true);
+                if (o is VBox)
+                {
+                    o = (o as VBox).BoxDefine();
+                }
+                return (TRet)o;
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool_Ret<TRet, T1> : IDelegate_BindTool
+    {
+        delegate TRet Action(T1 p1);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (T1 p1) =>
+            {
+                var o = _method.Invoke(context, _this, new object[] { p1 }, true, true);
+                if (o is VBox)
+                {
+                    o = (o as VBox).BoxDefine();
+                }
+                return (TRet)o;
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool_Ret<TRet, T1, T2> : IDelegate_BindTool
+    {
+        delegate TRet Action(T1 p1, T2 p2);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (T1 p1, T2 p2) =>
+            {
+                var o = _method.Invoke(context, _this, new object[] { p1, p2 }, true, true);
+                if (o is VBox)
+                {
+                    o = (o as VBox).BoxDefine();
+                }
+                return (TRet)o;
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool_Ret<TRet, T1, T2, T3> : IDelegate_BindTool
+    {
+        delegate TRet Action(T1 p1, T2 p2, T3 p3);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (T1 p1, T2 p2, T3 p3) =>
+            {
+                object o = _method.Invoke(context, _this, new object[] { p1, p2, p3 }, true, true);
+                if (o is VBox)
+                {
+                    o = (o as VBox).BoxDefine();
+                }
+                return (TRet)o;
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+    public class Delegate_BindTool_Ret<TRet, T1, T2, T3, T4> : IDelegate_BindTool
+    {
+        delegate TRet Action(T1 p1, T2 p2, T3 p3, T4 p4);
+        public Delegate CreateDele(Type deletype, ThreadContext context, CLRSharp_Instance _this, IMethod _method)
+        {
+            Action act = (T1 p1, T2 p2, T3 p3, T4 p4) =>
+            {
+                object o = _method.Invoke(context, _this, new object[] { p1, p2, p3, p4 }, true, true);
+                if (o is VBox)
+                {
+                    o = (o as VBox).BoxDefine();
+                }
+                return (TRet)o;
+            };
+            return Delegate.CreateDelegate(deletype, act.Target, act.Method);
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/Delegate/Delegate_Helper.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Delegate/Delegate_Helper.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: df6eb1afd3e74f448921195a991c6e9d
+guid: 8c47d69bfe4e6cf49b92a2b6d5cecacb
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/System.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 3ccbe4af561f45d48b1558a50f7ba9ee
+guid: 890c56c760294904abb9f88343a119d0
 folderAsset: yes
 DefaultImporter:
   userData: 

+ 522 - 336
Unity/Assets/Plugins/CLRSharp/Type/System/System_Type.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System/System_Type.cs

@@ -1,336 +1,522 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    class Type_Common_System : ICLRType_System
-    {
-        public System.Type TypeForSystem
-        {
-            get;
-            private set;
-        }
-        public ICLRSharp_Environment env
-        {
-            get;
-            private set;
-        }
-        public ICLRType[] SubTypes
-        {
-            get;
-            private set;
-        }
-        public Type_Common_System(ICLRSharp_Environment env, System.Type type, ICLRType[] subtype)
-        {
-            this.env = env;
-            this.TypeForSystem = type;
-            FullNameWithAssembly = type.AssemblyQualifiedName;
-            this.SubTypes = subtype;
-        }
-        public string Name
-        {
-            get { return TypeForSystem.Name; }
-        }
-
-        public string FullName
-        {
-            get { return TypeForSystem.FullName; }
-        }
-        public string FullNameWithAssembly
-        {
-            get;
-            private set;
-
-            //{
-            //    string aname = TypeForSystem.AssemblyQualifiedName;
-            //    int i = aname.IndexOf(',');
-            //    i = aname.IndexOf(',', i + 1);
-            //    return aname.Substring(0, i);
-            //}
-        }
-        public IMethod GetMethod(string funcname, MethodParamList types)
-        {
-            if (funcname == ".ctor")
-            {
-                var con = TypeForSystem.GetConstructor(types.ToArraySystem());
-                return new Method_Common_System(this, con);
-            }
-            var method = TypeForSystem.GetMethod(funcname, types.ToArraySystem());
-            return new Method_Common_System(this, method);
-        }
-        public object InitObj()
-        {
-            return Activator.CreateInstance(TypeForSystem);
-        }
-        public IMethod GetMethodT(string funcname, MethodParamList ttypes, MethodParamList types)
-        {
-            //这个实现还不完全
-            //有个别重构下,判定比这个要复杂
-            System.Reflection.MethodInfo _method = null;
-            var ms = TypeForSystem.GetMethods();
-            foreach (var m in ms)
-            {
-                if (m.Name == funcname && m.IsGenericMethodDefinition)
-                {
-                    var ts = m.GetGenericArguments();
-                    var ps = m.GetParameters();
-                    if (ts.Length == ttypes.Count && ps.Length == types.Count)
-                    {
-                        _method = m;
-                        break;
-                    }
-
-                }
-            }
-
-            // _method = TypeForSystem.GetMethod(funcname, types.ToArraySystem());
-
-            return new Method_Common_System(this, _method.MakeGenericMethod(ttypes.ToArraySystem()));
-        }
-        public IField GetField(string name)
-        {
-            return new Field_Common_System(env, TypeForSystem.GetField(name));
-        }
-        public bool IsInst(object obj)
-        {
-            return TypeForSystem.IsInstanceOfType(obj);
-
-        }
-
-
-        public ICLRType GetNestType(ICLRSharp_Environment env, string fullname)
-        {
-            throw new NotImplementedException();
-        }
-
-        public Delegate CreateDelegate(Type deletype, object _this, IMethod_System _method)
-        {
-            return Delegate.CreateDelegate(deletype, _this, _method.method_System as System.Reflection.MethodInfo);
-        }
-
-
-        public string[] GetFieldNames()
-        {
-            var fs = TypeForSystem.GetFields();
-            string[] names = new string[fs.Length];
-            for (int i = 0; i < fs.Length; i++)
-            {
-                names[i] = fs[i].Name;
-            }
-            return names;
-        }
-    }
-    class Field_Common_System : IField
-    {
-        public System.Reflection.FieldInfo info;
-        public Field_Common_System(ICLRSharp_Environment env, System.Reflection.FieldInfo field)
-        {
-            info = field;
-
-            FieldType = env.GetType(field.FieldType);
-            DeclaringType = env.GetType(field.DeclaringType);
-        }
-        public ICLRType FieldType
-        {
-            get;
-            private set;
-        }
-        public ICLRType DeclaringType
-        {
-            get;
-            private set;
-        }
-        public void Set(object _this, object value)
-        {
-            info.SetValue(_this, value);
-        }
-
-        public object Get(object _this)
-        {
-            return info.GetValue(_this);
-        }
-
-        public bool isStatic
-        {
-            get { return info.IsStatic; }
-        }
-    }
-
-    class Method_Common_System : IMethod_System
-    {
-
-        public Method_Common_System(ICLRType DeclaringType, System.Reflection.MethodBase method)
-        {
-            if (method == null)
-                throw new Exception("not allow null method.");
-            method_System = method;
-            this.DeclaringType = DeclaringType;
-            if (method is System.Reflection.MethodInfo)
-            {
-                System.Reflection.MethodInfo info = method as System.Reflection.MethodInfo;
-                ReturnType = DeclaringType.env.GetType(info.ReturnType);
-            }
-            ParamList = new MethodParamList(DeclaringType.env, method);
-        }
-        public bool isStatic
-        {
-            get { return method_System.IsStatic; }
-        }
-        public string Name
-        {
-            get
-            {
-                return method_System.Name;
-            }
-        }
-
-        public ICLRType DeclaringType
-        {
-            get;
-            private set;
-
-        }
-        public ICLRType ReturnType
-        {
-            get;
-            private set;
-        }
-        public MethodParamList ParamList
-        {
-            get;
-            private set;
-        }
-        public System.Reflection.MethodBase method_System
-        {
-            get;
-            private set;
-        }
-        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
-        {//对程序类型,其实我们做不到区分虚实调用。。。没办法
-            return Invoke(context, _this, _params);
-        }
-        public object Invoke(ThreadContext context, object _this, object[] _params)
-        {
-            if (_this is CLRSharp_Instance)
-            {
-                CLRSharp_Instance inst = _this as CLRSharp_Instance;
-                if (inst.type.HasSysBase)
-                {
-                    var btype = inst.type.ContainBase(method_System.DeclaringType);
-                    if (btype)
-                    {
-                        var CrossBind = context.environment.GetCrossBind(method_System.DeclaringType);
-                        if (CrossBind != null)
-                        {
-                            _this = CrossBind.CreateBind(inst);
-                        }
-                        else
-                        {
-                            _this = (_this as CLRSharp_Instance).system_base;
-                            //如果没有绑定器,尝试直接使用System_base;
-                        }
-                        //context.environment.logger.Log("这里有一个需要映射的类型");
-                    }
-                }
-            }
-            //委托是很特殊的存在
-            //if(this.DeclaringType.IsDelegate)
-            //{
-
-            //}
-            if (method_System is System.Reflection.ConstructorInfo)
-            {
-                if (method_System.DeclaringType.IsSubclassOf(typeof(Delegate)))
-                {//创建委托
-                    object src = _params[0];
-                    RefFunc fun = _params[1] as RefFunc;
-                    ICLRType_Sharp clrtype = fun._method.DeclaringType as ICLRType_Sharp;
-                    if (clrtype != null)//onclr
-                    {
-
-                        CLRSharp_Instance inst = src as CLRSharp_Instance;
-                        if (fun._method.isStatic && clrtype != null)
-                            inst = clrtype.staticInstance;
-                        return inst.GetDelegate(context, method_System.DeclaringType, fun._method);
-                    }
-                    else//onsystem
-                    {
-                        ICLRType_System stype = fun._method.DeclaringType as ICLRType_System;
-                        return stype.CreateDelegate(method_System.DeclaringType, src, fun._method as IMethod_System);
-                    }
-                }
-                object[] _outp = null;
-                if (_params != null && _params.Length > 0)
-                {
-                    _outp = new object[_params.Length];
-                    var _paramsdef = method_System.GetParameters();
-                    for (int i = 0; i < _params.Length; i++)
-                    {
-                        if (_params[i] == null)
-                            _outp[i] = null;
-                        Type tsrc = _params[i].GetType();
-                        Type ttarget = _paramsdef[i].ParameterType;
-                        if (tsrc == ttarget)
-                        {
-                            _outp[i] = _params[i];
-                        }
-                        else if (tsrc.IsSubclassOf(ttarget))
-                        {
-                            _outp[i] = _params[i];
-                        }
-                        else
-                        {
-                            if (ttarget == typeof(byte))
-                                _outp[i] = (byte)Convert.ToDecimal(_params[i]);
-                            else
-                            {
-                                _outp[i] = _params[i];
-                            }
-                            //var ms =_params[i].GetType().GetMethods();
-                        }
-                    }
-                }
-                var newobj = (method_System as System.Reflection.ConstructorInfo).Invoke(_outp);
-                return newobj;
-            }
-            else
-            {
-                //if (method_System.DeclaringType.IsSubclassOf(typeof(Delegate)))//直接用Delegate.Invoke,会导致转到本机代码再回来
-                ////会导致错误堆栈不方便观察,但是也没办法直接调用,只能手写一些常用类型
-                //{
-                //    //需要从Delegate转换成实际类型执行的帮助类
-                //    Action<int> abc = _this as Action<int>;
-                //    abc((int)_params[0]);
-                //    return null;
-                //}
-                //else
-                {
-                    return method_System.Invoke(_this, _params);
-                }
-            }
-
-        }
-
-        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual, bool autoLogDump)
-        {
-            try
-            {
-                return Invoke(context, _this, _params);
-            }
-            catch(Exception err)
-            {
-                if (context == null) context = ThreadContext.activeContext;
-                if (context == null)
-                    throw new Exception("当前线程没有创建ThreadContext,无法Dump", err);
-                else
-                {
-                    context.environment.logger.Log_Error("Error InSystemCall:" + this.DeclaringType.FullName + "::" + this.Name);
-                    throw err;
-                }
-            }
-        }
-
-    }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    public class Type_Common_System : ICLRType_System
+    {
+        public System.Type TypeForSystem
+        {
+            get;
+            private set;
+        }
+        public ICLRSharp_Environment env
+        {
+            get;
+            private set;
+        }
+        public ICLRType[] SubTypes
+        {
+            get;
+            private set;
+        }
+        public Type_Common_System(ICLRSharp_Environment env, System.Type type, ICLRType[] subtype)
+        {
+            this.env = env;
+            this.TypeForSystem = type;
+            FullNameWithAssembly = type.AssemblyQualifiedName;
+            this.SubTypes = subtype;
+        }
+        public string Name
+        {
+            get { return TypeForSystem.Name; }
+        }
+
+        public string FullName
+        {
+            get { return TypeForSystem.FullName; }
+        }
+        public string FullNameWithAssembly
+        {
+            get;
+            private set;
+
+            //{
+            //    string aname = TypeForSystem.AssemblyQualifiedName;
+            //    int i = aname.IndexOf(',');
+            //    i = aname.IndexOf(',', i + 1);
+            //    return aname.Substring(0, i);
+            //}
+        }
+        public virtual IMethod GetMethod(string funcname, MethodParamList types)
+        {
+            if (funcname == ".ctor")
+            {
+                var con = TypeForSystem.GetConstructor(types.ToArraySystem());
+                return new Method_Common_System(this, con);
+            }
+            var method = TypeForSystem.GetMethod(funcname, types.ToArraySystem());
+            return new Method_Common_System(this, method);
+        }
+        public virtual IMethod[] GetMethods(string funcname)
+        {
+            List<IMethod> methods = new List<IMethod>();
+            if (funcname == ".ctor")
+            {
+                var cons = TypeForSystem.GetConstructors();
+                foreach (var c in cons)
+                {
+                    methods.Add(new Method_Common_System(this, c));
+                }
+
+            }
+            else
+            {
+                var __methods = TypeForSystem.GetMethods();
+                foreach (var m in __methods)
+                {
+                    if (m.Name == funcname)
+                    {
+                        methods.Add(new Method_Common_System(this, m));
+                    }
+                }
+            }
+
+            return methods.ToArray();
+        }
+        public virtual IMethod[] GetAllMethods()
+        {
+            List<IMethod> methods = new List<IMethod>();
+            {
+                var __methods = TypeForSystem.GetMethods();
+                foreach (var m in __methods)
+                {
+                    //if (m.Name == funcname)
+                    {
+                        methods.Add(new Method_Common_System(this, m));
+                    }
+                }
+            }
+
+            return methods.ToArray();
+        }
+        public object InitObj()
+        {
+            return Activator.CreateInstance(TypeForSystem);
+        }
+        public virtual IMethod GetMethodT(string funcname, MethodParamList ttypes, MethodParamList types)
+        {
+            //这个实现还不完全
+            //有个别重构下,判定比这个要复杂
+            System.Reflection.MethodInfo _method = null;
+            var ms = TypeForSystem.GetMethods();
+            foreach (var m in ms)
+            {
+                if (m.Name == funcname && m.IsGenericMethodDefinition)
+                {
+                    var ts = m.GetGenericArguments();
+                    var ps = m.GetParameters();
+                    if (ts.Length == ttypes.Count && ps.Length == types.Count)
+                    {
+                        _method = m;
+                        break;
+                    }
+
+                }
+            }
+
+            // _method = TypeForSystem.GetMethod(funcname, types.ToArraySystem());
+
+            return new Method_Common_System(this, _method.MakeGenericMethod(ttypes.ToArraySystem()));
+        }
+        public virtual IField GetField(string name)
+        {
+            return new Field_Common_System(env, TypeForSystem.GetField(name));
+        }
+        public bool IsInst(object obj)
+        {
+            return TypeForSystem.IsInstanceOfType(obj);
+
+        }
+
+
+        public ICLRType GetNestType(ICLRSharp_Environment env, string fullname)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Delegate CreateDelegate(Type deletype, object _this, IMethod_System _method)
+        {
+            return Delegate.CreateDelegate(deletype, _this, _method.method_System as System.Reflection.MethodInfo);
+        }
+
+
+        public string[] GetFieldNames()
+        {
+            var fs = TypeForSystem.GetFields();
+            string[] names = new string[fs.Length];
+            for (int i = 0; i < fs.Length; i++)
+            {
+                names[i] = fs[i].Name;
+            }
+            return names;
+        }
+        public bool IsEnum()
+        {
+            return TypeForSystem.IsEnum;
+        }
+    }
+    class Field_Common_System : IField
+    {
+        public System.Reflection.FieldInfo info;
+        public Field_Common_System(ICLRSharp_Environment env, System.Reflection.FieldInfo field)
+        {
+            info = field;
+
+            FieldType = env.GetType(field.FieldType);
+            DeclaringType = env.GetType(field.DeclaringType);
+        }
+        public ICLRType FieldType
+        {
+            get;
+            private set;
+        }
+        public ICLRType DeclaringType
+        {
+            get;
+            private set;
+        }
+        public void Set(object _this, object value)
+        {
+            if(value!=null&&(value.GetType()==typeof(int)|| value.GetType() == typeof(Int64)))
+            {
+                if (info.FieldType == typeof(bool))
+                    value = (bool)((int)value != 0);
+                else if(info.FieldType==typeof(char))
+                {
+                    value = (char)((int)value);
+                }
+                else if (info.FieldType == typeof(byte))
+                {
+                    value = (byte)((int)value);
+                }
+                else if (info.FieldType == typeof(sbyte))
+                {
+                    value = (sbyte)((int)value);
+                }
+                else if (info.FieldType == typeof(UInt16))
+                {
+                    value = (UInt16)((int)value);
+                }
+                else if (info.FieldType == typeof(Int16))
+                {
+                    value = (Int16)((int)value);
+                }
+                else if (info.FieldType == typeof(UInt32))
+                {
+                    value = (UInt32)((int)value);
+                }
+                else if (info.FieldType == typeof(UInt64))
+                {
+                    value = (UInt64)((Int64)value);
+                }
+
+            }
+         
+            info.SetValue(_this, value);
+        }
+
+        public object Get(object _this)
+        {
+            return info.GetValue(_this);
+        }
+
+        public bool isStatic
+        {
+            get { return info.IsStatic; }
+        }
+    }
+
+    class Method_Common_System : IMethod_System
+    {
+
+        public Method_Common_System(ICLRType DeclaringType, System.Reflection.MethodBase method)
+        {
+            if (method == null)
+                throw new Exception("not allow null method.");
+            method_System = method;
+            this.DeclaringType = DeclaringType;
+            if (method is System.Reflection.MethodInfo)
+            {
+                System.Reflection.MethodInfo info = method as System.Reflection.MethodInfo;
+                ReturnType = DeclaringType.env.GetType(info.ReturnType);
+            }
+            ParamList = new MethodParamList(DeclaringType.env, method);
+        }
+        public bool isStatic
+        {
+            get { return method_System.IsStatic; }
+        }
+        public string Name
+        {
+            get
+            {
+                return method_System.Name;
+            }
+        }
+
+        public ICLRType DeclaringType
+        {
+            get;
+            private set;
+
+        }
+        public ICLRType ReturnType
+        {
+            get;
+            private set;
+        }
+        public MethodParamList ParamList
+        {
+            get;
+            private set;
+        }
+        public System.Reflection.MethodBase method_System
+        {
+            get;
+            private set;
+        }
+        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual)
+        {//对程序类型,其实我们做不到区分虚实调用。。。没办法
+            if (this.Name == "Concat" && this.DeclaringType.TypeForSystem == typeof(string))
+            {//这里有一个IL2CPP的问题
+
+
+                if (_params.Length == 1)
+                {
+                    if (_params[0] == null)
+                        return "null";
+                    if (_params[0] is string[])
+                    {
+                        return string.Concat(_params[0] as string[]);
+                    }
+                    else if (_params[0] is object[])
+                    {
+                        return string.Concat(_params[0] as object[]);
+                    }
+                    else
+                    {
+                        return _params[0].ToString();
+                    }
+                }
+                else
+                {
+                    string outstr = "null";
+                    if (_params[0] != null) outstr = _params[0].ToString();
+
+                    for (int i = 1; i < _params.Length; i++)
+                    {
+                        if (_params[i] != null)
+                            outstr += _params[i];
+                        else
+                            outstr += "null";
+                    }
+                    return outstr;
+                }
+
+            }
+            return Invoke(context, _this, _params);
+        }
+        public object Invoke(ThreadContext context, object _this, object[] _params)
+        {
+            if (_this is CLRSharp_Instance)
+            {
+                CLRSharp_Instance inst = _this as CLRSharp_Instance;
+                if (inst.type.HasSysBase)
+                {
+                    var btype = inst.type.ContainBase(method_System.DeclaringType);
+                    if (btype)
+                    {
+                        var CrossBind = context.environment.GetCrossBind(method_System.DeclaringType);
+                        if (CrossBind != null)
+                        {
+                            _this = CrossBind.CreateBind(inst);
+                        }
+                        else
+                        {
+                            _this = (_this as CLRSharp_Instance).system_base;
+                            //如果没有绑定器,尝试直接使用System_base;
+                        }
+                        //context.environment.logger.Log("这里有一个需要映射的类型");
+                    }
+                }
+            }
+            //委托是很特殊的存在
+            //if(this.DeclaringType.IsDelegate)
+            //{
+
+            //}
+            if (method_System is System.Reflection.ConstructorInfo)
+            {
+                if (method_System.DeclaringType.IsSubclassOf(typeof(Delegate)))
+                {//创建委托
+                    object src = _params[0];
+                    RefFunc fun = _params[1] as RefFunc;
+                    ICLRType_Sharp clrtype = fun._method.DeclaringType as ICLRType_Sharp;
+                    if (clrtype != null)//onclr
+                    {
+
+                        CLRSharp_Instance inst = src as CLRSharp_Instance;
+                        if (fun._method.isStatic && clrtype != null)
+                            inst = clrtype.staticInstance;
+                        return inst.GetDelegate(context, method_System.DeclaringType, fun._method);
+                    }
+                    else//onsystem
+                    {
+                        ICLRType_System stype = fun._method.DeclaringType as ICLRType_System;
+                        return stype.CreateDelegate(method_System.DeclaringType, src, fun._method as IMethod_System);
+                    }
+                }
+                object[] _outp = null;
+                if (_params != null && _params.Length > 0)
+                {
+                    _outp = new object[_params.Length];
+                    var _paramsdef = method_System.GetParameters();
+                    for (int i = 0; i < _params.Length; i++)
+                    {
+                        if (_params[i] == null)
+                        {
+                            _outp[i] = null;
+                            continue;
+                        }
+                        Type tsrc = _params[i].GetType();
+                        Type ttarget = _paramsdef[i].ParameterType;
+                        if (tsrc == ttarget)
+                        {
+                            _outp[i] = _params[i];
+                        }
+                        else if (tsrc.IsSubclassOf(ttarget))
+                        {
+                            _outp[i] = _params[i];
+                        }
+                        else if (_paramsdef[i].ParameterType.IsEnum)//特殊处理枚举
+                        {
+                            var ms = _paramsdef[i].ParameterType.GetMethods();
+                            _outp[i] = Enum.ToObject(_paramsdef[i].ParameterType, _params[i]);
+                        }
+                        else
+                        {
+                            if (ttarget == typeof(byte))
+                                _outp[i] = (byte)Convert.ToDecimal(_params[i]);
+                            else
+                            {
+                                _outp[i] = _params[i];
+                            }
+                            //var ms =_params[i].GetType().GetMethods();
+                        }
+                    }
+                }
+                var newobj = (method_System as System.Reflection.ConstructorInfo).Invoke(_outp);
+                return newobj;
+            }
+            else
+            {
+                Dictionary<int, object> hasref = new Dictionary<int, object>();
+                object[] _outp = null;
+                if (_params != null && _params.Length > 0)
+                {
+                    _outp = new object[_params.Length];
+                    var _paramsdef = method_System.GetParameters();
+                    for (int i = 0; i < _params.Length; i++)
+                    {
+                        if (_params[i] is CLRSharp.StackFrame.RefObj)//特殊处理outparam
+                        {
+                            object v = (_params[i] as CLRSharp.StackFrame.RefObj).Get();
+                            if (v is VBox)
+                            {
+                                v = (v as VBox).BoxDefine();
+                            }
+                            hasref[i] = v;
+                            _outp[i] = v;
+                        }
+                        else if (_paramsdef[i].ParameterType.IsEnum)//特殊处理枚举
+                        {
+                            var ms = _paramsdef[i].ParameterType.GetMethods();
+                            _outp[i] = Enum.ToObject(_paramsdef[i].ParameterType, _params[i]);
+                        }
+                        else
+                        {
+                            if(_paramsdef[i].ParameterType==typeof(UInt64)&&_params[i] is Int64)
+                            {
+                                _outp[i] = (UInt64)(Int64)_params[i];
+                            }
+                            else if (_paramsdef[i].ParameterType == typeof(Int64) && _params[i] is UInt64)
+                            {
+                                _outp[i] = (Int64)(UInt64)_params[i];
+                            }
+                            else if (_paramsdef[i].ParameterType == typeof(UInt32) && _params[i] is Int32)
+                            {
+                                _outp[i] = (UInt32)(Int32)_params[i];
+                            }
+                            else if (_paramsdef[i].ParameterType == typeof(Int32) && _params[i] is UInt32)
+                            {
+                                _outp[i] = (Int32)(UInt32)_params[i];
+                            }
+                            else
+                            {
+                                _outp[i] = _params[i];
+                            }
+                        }
+                    }
+                }
+                //if (method_System.DeclaringType.IsSubclassOf(typeof(Delegate)))//直接用Delegate.Invoke,会导致转到本机代码再回来
+                ////会导致错误堆栈不方便观察,但是也没办法直接调用,只能手写一些常用类型
+                //{
+                //    //需要从Delegate转换成实际类型执行的帮助类
+                //    Action<int> abc = _this as Action<int>;
+                //    abc((int)_params[0]);
+                //    return null;
+                //}
+                //else
+                {
+                    var _out = method_System.Invoke(_this, _outp);
+                    foreach (var _ref in hasref)
+                    {
+                        if (_ref.Value is VBox)
+                        {
+                            (_ref.Value as VBox).SetDirect(_outp[_ref.Key]);
+                        }
+                        else
+                        {
+                            (_params[_ref.Key] as CLRSharp.StackFrame.RefObj).Set(_outp[_ref.Key]);
+                        }
+                    }
+                    return _out;
+                }
+            }
+
+        }
+
+        public object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual, bool autoLogDump)
+        {
+            try
+            {
+                return Invoke(context, _this, _params);
+            }
+            catch (Exception err)
+            {
+                if (context == null) context = ThreadContext.activeContext;
+                if (context == null)
+                    throw new Exception("当前线程没有创建ThreadContext,无法Dump", err);
+                else
+                {
+                    context.environment.logger.Log_Error("Error InSystemCall:" + this.DeclaringType.FullName + "::" + this.Name);
+                    throw err;
+                }
+            }
+        }
+
+    }
+
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/System/System_Type.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/System/System_Type.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 9df6666293942014bbd459c9e2eafa90
+guid: 42c3f2e5c3b50e5458673a9215251765
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 149 - 145
Unity/Assets/Plugins/CLRSharp/Type/Type_Common.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_Common.cs

@@ -1,145 +1,149 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    //一个ICLRType 是一个所有类型的抽象,无论是System.Type
-    //还是CLRSharp的抽象,均可通过ICLRType进行调用
-    public interface ICLRType
-    {
-        ICLRSharp_Environment env
-        {
-            get;
-        }
-        string Name
-        {
-            get;
-        }
-        string FullName
-        {
-            get;
-        }
-        string FullNameWithAssembly
-        {
-            get;
-        }
-        System.Type TypeForSystem
-        {
-            get;
-        }
-        //funcname==".ctor" 表示构造函数
-        IMethod GetMethod(string funcname, MethodParamList types);
-        object InitObj();
-        /// <summary>
-        /// 获取模板函数
-        /// </summary>
-        /// <param name="funcname"></param>
-        /// <param name="TTypes"></param>
-        /// <param name="types"></param>
-        /// <returns></returns>
-        IMethod GetMethodT(string funcname, MethodParamList TTypes, MethodParamList types);
-
-        IField GetField(string name);
-        string[] GetFieldNames();
-        bool IsInst(object obj);
-
-        ICLRType GetNestType(ICLRSharp_Environment env, string fullname);
-        ICLRType[] SubTypes
-        {
-            get;
-        }
-    }
-    public interface ICLRType_Sharp : ICLRType
-    {
-        CLRSharp_Instance staticInstance
-        {
-            get;
-        }
-        void ResetStaticInstace();
-        bool NeedCCtor
-        {
-            get;
-        }
-        void InvokeCCtor(ThreadContext context);
-        Mono.Cecil.TypeDefinition type_CLRSharp
-        {
-            get;
-        }
-        IMethod GetVMethod(IMethod _base);
-
-        bool ContainBase(Type t);
-        bool HasSysBase
-        {
-            get;
-        }
-        string[] GetMethodNames();
-    }
-    public interface ICLRType_System : ICLRType
-    {
-        Delegate CreateDelegate(Type deletype, object _this, IMethod_System _method);
-    }
-    public interface IMethod
-    {
-        object Invoke(ThreadContext context, object _this, object[] _params);
-        object Invoke(ThreadContext context, object _this, object[] _params,bool bVisual);
-
-        object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual,bool autoLogDump);
-
-        bool isStatic
-        {
-            get;
-        }
-        string Name
-        {
-            get;
-        }
-
-        ICLRType DeclaringType
-        {
-            get;
-        }
-        ICLRType ReturnType
-        {
-            get;
-        }
-        MethodParamList ParamList
-        {
-            get;
-        }
-    }
-    public interface IMethod_System : IMethod
-    {
-        System.Reflection.MethodBase method_System
-        {
-            get;
-        }
-    }
-    public interface IMethod_Sharp : IMethod
-    {
-        CodeBody body
-        {
-            get;
-        }
-
-    }
-    public interface IField
-    {
-        void Set(object _this, object value);
-        object Get(object _this);
-        bool isStatic
-        {
-            get;
-        }
-        ICLRType DeclaringType
-        {
-            get;
-
-        }
-        ICLRType FieldType
-        {
-            get;
-        }
-    }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    //一个ICLRType 是一个所有类型的抽象,无论是System.Type
+    //还是CLRSharp的抽象,均可通过ICLRType进行调用
+    public interface ICLRType
+    {
+        ICLRSharp_Environment env
+        {
+            get;
+        }
+        string Name
+        {
+            get;
+        }
+        string FullName
+        {
+            get;
+        }
+        string FullNameWithAssembly
+        {
+            get;
+        }
+        System.Type TypeForSystem
+        {
+            get;
+        }
+        //funcname==".ctor" 表示构造函数
+        IMethod GetMethod(string funcname, MethodParamList types);
+        IMethod[] GetMethods(string funcname);
+        IMethod[] GetAllMethods();
+        object InitObj();
+        /// <summary>
+        /// 获取模板函数
+        /// </summary>
+        /// <param name="funcname"></param>
+        /// <param name="TTypes"></param>
+        /// <param name="types"></param>
+        /// <returns></returns>
+        IMethod GetMethodT(string funcname, MethodParamList TTypes, MethodParamList types);
+        IField GetField(string name);
+        string[] GetFieldNames();
+        bool IsInst(object obj);
+
+        ICLRType GetNestType(ICLRSharp_Environment env, string fullname);
+        ICLRType[] SubTypes
+        {
+            get;
+        }
+
+        bool IsEnum();
+            
+    }
+    public interface ICLRType_Sharp : ICLRType
+    {
+        CLRSharp_Instance staticInstance
+        {
+            get;
+        }
+        void ResetStaticInstace();
+        bool NeedCCtor
+        {
+            get;
+        }
+        void InvokeCCtor(ThreadContext context);
+        Mono.Cecil.TypeDefinition type_CLRSharp
+        {
+            get;
+        }
+        IMethod GetVMethod(IMethod _base);
+
+        bool ContainBase(Type t);
+        bool HasSysBase
+        {
+            get;
+        }
+        string[] GetMethodNames();
+    }
+    public interface ICLRType_System : ICLRType
+    {
+        Delegate CreateDelegate(Type deletype, object _this, IMethod_System _method);
+    }
+    public interface IMethod
+    {
+        object Invoke(ThreadContext context, object _this, object[] _params);
+        object Invoke(ThreadContext context, object _this, object[] _params,bool bVisual);
+
+        object Invoke(ThreadContext context, object _this, object[] _params, bool bVisual,bool autoLogDump);
+
+        bool isStatic
+        {
+            get;
+        }
+        string Name
+        {
+            get;
+        }
+
+        ICLRType DeclaringType
+        {
+            get;
+        }
+        ICLRType ReturnType
+        {
+            get;
+        }
+        MethodParamList ParamList
+        {
+            get;
+        }
+    }
+    public interface IMethod_System : IMethod
+    {
+        System.Reflection.MethodBase method_System
+        {
+            get;
+        }
+    }
+    public interface IMethod_Sharp : IMethod
+    {
+        CodeBody body
+        {
+            get;
+        }
+
+    }
+    public interface IField
+    {
+        void Set(object _this, object value);
+        object Get(object _this);
+        bool isStatic
+        {
+            get;
+        }
+        ICLRType DeclaringType
+        {
+            get;
+
+        }
+        ICLRType FieldType
+        {
+            get;
+        }
+    }
+
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/Type_Common.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_Common.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 6502218e88187b54f80e4b3f1bf61590
+guid: d2cca4ee7518c1740a9cb71d9ea5c3b1
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 202 - 171
Unity/Assets/Plugins/CLRSharp/Type/Type_List.cs → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_List.cs

@@ -1,171 +1,202 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    /// <summary>
-    /// 方法参数表
-    /// </summary>
-    public class MethodParamList : List<ICLRType>
-    {
-        private MethodParamList()
-        {
-
-        }
-        private MethodParamList(IList<ICLRType> types)
-        {
-            if(types!=null)
-            {
-                foreach(var t in types)
-                {
-                    this.Add(t);
-                }
-            }
-
-        }
-        static MethodParamList _OneParam_Int = null;
-        public static MethodParamList const_OneParam_Int(ICLRSharp_Environment env)
-        {
-            if (_OneParam_Int == null)
-            {
-                _OneParam_Int = new MethodParamList(new ICLRType[]{env.GetType(typeof(int))});
-            }
-
-            return _OneParam_Int;
-
-
-        }
-        static MethodParamList _ZeroParam = null;
-        public static MethodParamList constEmpty()
-        {
-            if (_ZeroParam == null)
-            {
-                _ZeroParam = new MethodParamList(new ICLRType[] { });
-            }
-            return _ZeroParam;
-        }
-
-        public static MethodParamList Make(params ICLRType[] types)
-        {
-            return new MethodParamList(types);
-        }
-        public MethodParamList(ICLRSharp_Environment env, Mono.Cecil.MethodReference method)
-        {
-            if (method.HasParameters)
-            {
-                Mono.Cecil.GenericInstanceType _typegen = null;
-                _typegen = method.DeclaringType as Mono.Cecil.GenericInstanceType;
-                Mono.Cecil.GenericInstanceMethod gm = method as Mono.Cecil.GenericInstanceMethod;
-                MethodParamList _methodgen = null;
-                if (gm != null)
-                    _methodgen = new MethodParamList(env, gm);
-                foreach (var p in method.Parameters)
-                {
-                    string paramname = p.ParameterType.FullName;
-
-                    if (p.ParameterType.IsGenericParameter)
-                    {
-                        if (p.ParameterType.Name.Contains("!!"))
-                        {
-                            int index = int.Parse(p.ParameterType.Name.Substring(2));
-                            paramname = _methodgen[index].FullName;
-                        }
-                        else if (p.ParameterType.Name.Contains("!"))
-                        {
-                            int index = int.Parse(p.ParameterType.Name.Substring(1));
-                            paramname = _typegen.GenericArguments[index].FullName;
-                        }
-                    }
-
-                    if (paramname.Contains("!!"))
-                    {
-                        this.Add(GetTType(env, p, _methodgen));
-                    }
-                    else
-                    {
-                        this.Add(env.GetType(paramname));
-                    }
-                }
-            }
-        }
-        public MethodParamList(ICLRSharp_Environment env, Mono.Collections.Generic.Collection<Mono.Cecil.Cil.VariableDefinition> ps)
-        {
-            foreach (var p in ps)
-            {
-                string paramname = p.VariableType.FullName;
-
-                this.Add(env.GetType(paramname));
-
-            }
-        }
-        static ICLRType GetTType(ICLRSharp_Environment env, Mono.Cecil.ParameterDefinition param, MethodParamList _methodgen)
-        {
-            string typename = param.ParameterType.FullName;
-            for (int i = 0; i < _methodgen.Count; i++)
-            {
-                string p = "!!" + i.ToString();
-                typename = typename.Replace(p, _methodgen[i].FullName);
-            }
-            return env.GetType(typename);
-        }
-        public MethodParamList(ICLRSharp_Environment env, Mono.Cecil.GenericInstanceMethod method)
-        {
-            foreach (var p in method.GenericArguments)
-            {
-                string paramname = p.FullName;
-                if (p.IsGenericParameter)
-                {
-
-                    var typegen = method.DeclaringType as Mono.Cecil.GenericInstanceType;
-                    if (p.Name[0] == '!')
-                    {
-                        int index = int.Parse(p.Name.Substring(1));
-                        paramname = typegen.GenericArguments[index].FullName;
-                    }
-                }
-                this.Add(env.GetType(paramname));
-            }
-        }
-
-        public MethodParamList(ICLRSharp_Environment env, System.Reflection.MethodBase method)
-        {
-            foreach (var p in method.GetParameters())
-            {
-                this.Add(env.GetType(p.ParameterType));
-            }
-        }
-        public override int GetHashCode()
-        {
-            return this.ToString().GetHashCode();
-        }
-        public override string ToString()
-        {
-            if (name == null)
-            {
-                name = "";
-                foreach (var t in this)
-                {
-                    name += t.ToString() + ";";
-                }
-            }
-            return name;
-        }
-        string name = null;
-        System.Type[] SystemType = null;
-        public System.Type[] ToArraySystem()
-        {
-            if (SystemType == null)
-            {
-                SystemType = new System.Type[this.Count];
-                for (int i = 0; i < this.Count; i++)
-                {
-
-                    SystemType[i] = this[i].TypeForSystem;
-                }
-            }
-            return SystemType;
-        }
-    }
-
-}
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CLRSharp
+{
+    /// <summary>
+    /// 方法参数表
+    /// </summary>
+    public class MethodParamList : List<ICLRType>
+    {
+        private MethodParamList()
+        {
+
+        }
+        private MethodParamList(IList<ICLRType> types)
+        {
+            if (types != null)
+            {
+                foreach (var t in types)
+                {
+                    this.Add(t);
+                }
+            }
+
+        }
+        static MethodParamList _OneParam_Int = null;
+        public static MethodParamList const_OneParam_Int(ICLRSharp_Environment env)
+        {
+            if (_OneParam_Int == null)
+            {
+                _OneParam_Int = new MethodParamList(new ICLRType[] { env.GetType(typeof(int)) });
+            }
+
+            return _OneParam_Int;
+
+
+        }
+        static MethodParamList _ZeroParam = null;
+        public static MethodParamList constEmpty()
+        {
+            if (_ZeroParam == null)
+            {
+                _ZeroParam = new MethodParamList(new ICLRType[] { });
+            }
+            return _ZeroParam;
+        }
+
+        public static MethodParamList Make(params ICLRType[] types)
+        {
+            return new MethodParamList(types);
+        }
+        public MethodParamList(ICLRSharp_Environment env, Mono.Cecil.MethodReference method)
+        {
+            if (method.HasParameters)
+            {
+                Mono.Cecil.GenericInstanceType _typegen = null;
+                _typegen = method.DeclaringType as Mono.Cecil.GenericInstanceType;
+                Mono.Cecil.GenericInstanceMethod gm = method as Mono.Cecil.GenericInstanceMethod;
+                MethodParamList _methodgen = null;
+                if (gm != null)
+                    _methodgen = new MethodParamList(env, gm);
+                foreach (var p in method.Parameters)
+                {
+                    string paramname = p.ParameterType.FullName;
+
+                    if (p.ParameterType.IsGenericParameter)
+                    {
+                        if (p.ParameterType.Name.Contains("!!"))
+                        {
+                            int index = int.Parse(p.ParameterType.Name.Substring(2));
+                            paramname = _methodgen[index].FullName;
+                        }
+                        else if (p.ParameterType.Name.Contains("!"))
+                        {
+                            int index = int.Parse(p.ParameterType.Name.Substring(1));
+                            paramname = _typegen.GenericArguments[index].FullName;
+                        }
+                    }
+
+                    if (paramname.Contains("!!"))
+                    {
+                        //string typename = param.ParameterType.FullName;
+                        for (int i = 0; i < _methodgen.Count; i++)
+                        {
+                            string pp = "!!" + i.ToString();
+                            paramname = paramname.Replace(pp, _methodgen[i].FullName);
+                        }
+                        //this.Add(GetTType(env, p, _methodgen));
+                    }
+
+                    if (paramname.Contains("!"))//函数有T
+                    {
+                        var gens = (method.DeclaringType as Mono.Cecil.GenericInstanceType).GenericArguments;
+                        for (int i = 0; i < gens.Count; i++)
+                        {
+                            string pp = "!" + i.ToString();
+                            paramname = paramname.Replace(pp, gens[i].FullName);
+                        }
+                    }
+                    //else
+                    {
+                        var type = env.GetType(paramname);
+                        if(type.IsEnum())
+                        {
+                            type = env.GetType(type.TypeForSystem);
+                        }
+                        this.Add(type);
+                    }
+
+                }
+            }
+        }
+        public MethodParamList(ICLRSharp_Environment env, Mono.Collections.Generic.Collection<Mono.Cecil.Cil.VariableDefinition> ps)
+        {
+            foreach (var p in ps)
+            {
+                string paramname = p.VariableType.FullName;
+                var type = env.GetType(paramname);
+                if (type!=null&&type.IsEnum())
+                {
+                    type = env.GetType(type.TypeForSystem);
+                }
+                this.Add(type);
+
+            }
+        }
+        static ICLRType GetTType(ICLRSharp_Environment env, Mono.Cecil.ParameterDefinition param, MethodParamList _methodgen)
+        {
+            string typename = param.ParameterType.FullName;
+            for (int i = 0; i < _methodgen.Count; i++)
+            {
+                string p = "!!" + i.ToString();
+                typename = typename.Replace(p, _methodgen[i].FullName);
+            }
+            return env.GetType(typename);
+        }
+        public MethodParamList(ICLRSharp_Environment env, Mono.Cecil.GenericInstanceMethod method)
+        {
+            foreach (var p in method.GenericArguments)
+            {
+                string paramname = p.FullName;
+                if (p.IsGenericParameter)
+                {
+
+                    var typegen = method.DeclaringType as Mono.Cecil.GenericInstanceType;
+                    if (p.Name[0] == '!')
+                    {
+                        int index = int.Parse(p.Name.Substring(1));
+                        paramname = typegen.GenericArguments[index].FullName;
+                    }
+                }
+                var type = env.GetType(paramname);
+                if (type.IsEnum())
+                {
+                    type = env.GetType(type.TypeForSystem);
+                }
+                this.Add(type);
+            }
+        }
+
+        public MethodParamList(ICLRSharp_Environment env, System.Reflection.MethodBase method)
+        {
+            foreach (var p in method.GetParameters())
+            {
+                this.Add(env.GetType(p.ParameterType));
+            }
+        }
+        public override int GetHashCode()
+        {
+            return this.ToString().GetHashCode();
+        }
+        public override string ToString()
+        {
+            if (name == null)
+            {
+                name = "";
+                foreach (var t in this)
+                {
+                    name += t.ToString() + ";";
+                }
+            }
+            return name;
+        }
+        string name = null;
+        System.Type[] SystemType = null;
+        public System.Type[] ToArraySystem()
+        {
+            if (SystemType == null)
+            {
+                SystemType = new System.Type[this.Count];
+                for (int i = 0; i < this.Count; i++)
+                {
+
+                    SystemType[i] = this[i].TypeForSystem;
+                }
+            }
+            return SystemType;
+        }
+    }
+
+}

+ 1 - 1
Unity/Assets/Plugins/CLRSharp/Type/Type_List.cs.meta → Unity/Assets/Plugins/CLRSharp/CLRSharp/Type/Type_List.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 455fe6a3c8ea71945aeaeeed401221d1
+guid: 92f42f56d2bb2c64c9da323d08501d33
 MonoImporter:
   serializedVersion: 2
   defaultReferences: []

+ 0 - 262
Unity/Assets/Plugins/CLRSharp/CLRSharp_Env.cs

@@ -1,262 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    
-    public class CLRSharp_Environment : ICLRSharp_Environment
-    {
-        public string version
-        {
-            get
-            {
-                return "0.36.5Alpha";
-            }
-        }
-        public ICLRSharp_Logger logger
-        {
-            get;
-            private set;
-        }
-        public CLRSharp_Environment(ICLRSharp_Logger logger)
-        {
-            this.logger = logger;
-            logger.Log_Warning("CLR# Ver:" + version + " Inited.");
-
-            this.RegCrossBind(new CrossBind_IEnumerable());
-            this.RegCrossBind(new CrossBind_IEnumerator());
-        }
-        Dictionary<string, ICLRType> mapType = new Dictionary<string, ICLRType>();
-        //public Dictionary<string, Mono.Cecil.ModuleDefinition> mapModule = new Dictionary<string, Mono.Cecil.ModuleDefinition>();
-        public void LoadModule(System.IO.Stream dllStream)
-        {
-            LoadModule(dllStream, null, null);
-        }
-        public void LoadModule(System.IO.Stream dllStream, System.IO.Stream pdbStream, Mono.Cecil.Cil.ISymbolReaderProvider debugInfoLoader)
-        {
-            var module = Mono.Cecil.ModuleDefinition.ReadModule(dllStream);
-            if (debugInfoLoader != null && pdbStream != null)
-            {
-                module.ReadSymbols(debugInfoLoader.GetSymbolReader(module, pdbStream));
-            }
-            //mapModule[module.Name] = module;
-            if (module.HasTypes)
-            {
-                foreach (var t in module.Types)
-                {
-                    mapType[t.FullName] = new Type_Common_CLRSharp(this, t);
-                }
-            }
-            if (module.HasAssemblyReferences)
-            {
-                foreach (var ar in module.AssemblyReferences)
-                {
-                    if (moduleref.Contains(ar.Name) == false)
-                        moduleref.Add(ar.Name);
-                }
-            }
-        }
-        public List<System.Reflection.Assembly> assemblylist;
-        public void AddSerachAssembly(System.Reflection.Assembly assembly)
-        {
-            if (assemblylist == null)
-                assemblylist = new List<System.Reflection.Assembly>();
-            assemblylist.Add(assembly);
-        }
-        public void LoadModule_OnlyName(System.IO.Stream dllStream)
-        {
-            var module = Mono.Cecil.ModuleDefinition.ReadModule(dllStream);
-            if (moduleref.Contains(module.Name) == false)
-                moduleref.Add(module.Name);
-            if (module.HasAssemblyReferences)
-            {
-                foreach (var ar in module.AssemblyReferences)
-                {
-                    if (moduleref.Contains(ar.Name) == false)
-                        moduleref.Add(ar.Name);
-                }
-            }
-        }
-        public CodeBody CreateCodeBody(Method_Common_CLRSharp method)
-        {
-            return new CodeBody(this, method.method_CLRSharp);
-        }
-        List<string> moduleref = new List<string>();
-        public string[] GetAllTypes()
-        {
-            string[] array = new string[mapType.Count];
-            mapType.Keys.CopyTo(array, 0);
-            return array;
-        }
-        public string[] GetModuleRefNames()
-        {
-            return moduleref.ToArray();
-        }
-        //得到类型的时候应该得到模块内Type或者真实Type
-        //一个统一的Type,然后根据具体情况调用两边
-
-        public ICLRType GetType(string fullname)
-        {
-            ICLRType type = null;
-            bool b = mapType.TryGetValue(fullname, out type);
-            if (!b)
-            {
-                List<ICLRType> subTypes = new List<ICLRType>();
-                if (fullname.Contains("<>") || fullname.Contains("/"))//匿名类型
-                {
-                    string[] subts = fullname.Split('/');
-                    ICLRType ft = GetType(subts[0]);
-                    if (ft is ICLRType_Sharp)
-                    {
-                        for (int i = 1; i < subts.Length; i++)
-                        {
-                            ft = ft.GetNestType(this, subts[i]);
-                        }
-                        return ft;
-                    }
-                }
-                string fullnameT = fullname;//.Replace('/', '+');
-
-                if (fullnameT.Contains("<"))
-                {
-                    string outname = "";
-                    int depth = 0;
-                    int lastsplitpos = 0;
-                    for (int i = 0; i < fullname.Length; i++)
-                    {
-                        string checkname = null;
-                        if (fullname[i] == '/')
-                        {
-
-                        }
-                        else if (fullname[i] == '<')
-                        {
-                            if (i != 0)
-                                depth++;
-                            if (depth == 1)//
-                            {
-                                lastsplitpos = i;
-                                outname += "[";
-                                continue;
-                            }
-
-                        }
-                        else if (fullname[i] == '>')
-                        {
-                            if (depth == 1)
-                            {
-                                checkname = fullnameT.Substring(lastsplitpos + 1, i - lastsplitpos - 1);
-                                var subtype = GetType(checkname);
-                                subTypes.Add(subtype);
-                                if (subtype is ICLRType_Sharp) subtype = GetType(typeof(CLRSharp_Instance));
-                                outname += "[" + subtype.FullNameWithAssembly + "]";
-                                lastsplitpos = i;
-                            }
-                            //if(depth>0)
-                            depth--;
-                            if (depth == 0)
-                            {
-                                outname += "]";
-                                continue;
-                            }
-                            else if (depth < 0)
-                            {
-                                depth = 0;
-                            }
-                        }
-                        else if (fullname[i] == ',')
-                        {
-                            if (depth == 1)
-                            {
-                                checkname = fullnameT.Substring(lastsplitpos + 1, i - lastsplitpos - 1);
-                                var subtype = GetType(checkname);
-                                subTypes.Add(subtype);
-                                if (subtype is ICLRType_Sharp) subtype = GetType(typeof(CLRSharp_Instance));
-                                outname += "[" + subtype.FullNameWithAssembly + "],";
-                                lastsplitpos = i;
-                            }
-                        }
-                        if (depth == 0)
-                        {
-                            outname += fullnameT[i];
-                        }
-                    }
-                    fullnameT = outname;
-                    //    fullnameT = fullnameT.Replace('<', '[');
-                    //fullnameT = fullnameT.Replace('>', ']');
-
-
-                }
-                fullnameT = fullnameT.Replace('/', '+');
-                System.Type t = System.Type.GetType(fullnameT);
-
-                if (t == null)
-                {
-                    if (assemblylist != null)
-                    {
-                        foreach (var i in assemblylist)
-                        {
-                            t = i.GetType(fullnameT);
-                            if (t != null)
-                                break;
-                        }
-                    }
-                    if (t == null)
-                    {
-                        foreach (var rm in moduleref)
-                        {
-                            t = System.Type.GetType(fullnameT + "," + rm);
-                            if (t != null)
-                            {
-                                fullnameT = fullnameT + "," + rm;
-                                break;
-                            }
-                        }
-                    }
-                }
-                if (t != null)
-                {
-                    type = new Type_Common_System(this, t, subTypes.ToArray());
-                }
-                mapType[fullname] = type;
-            }
-            return type;
-        }
-
-
-        public ICLRType GetType(System.Type systemType)
-        {
-            ICLRType type = null;
-            bool b = mapType.TryGetValue(systemType.FullName, out type);
-            if (!b)
-            {
-                type = new Type_Common_System(this, systemType,  null);
-                mapType[systemType.FullName] = type;
-            }
-            return type;
-        }
-        public void RegType(ICLRType type)
-        {
-            mapType[type.FullName] = type;
-        }
-
-        /// <summary>
-        /// 交叉绑定工具,让脚本继承程序类型用的
-        /// </summary>
-        Dictionary<Type, ICrossBind> crossBind = new Dictionary<Type, ICrossBind>();
-        public void RegCrossBind(ICrossBind bind)
-        {
-            crossBind[bind.Type] = bind;
-        }
-
-        public ICrossBind GetCrossBind(Type type)
-        {
-            ICrossBind bind = null;
-
-            crossBind.TryGetValue(type, out bind);
-            return bind;
-        }
-
-    }
-}

+ 0 - 42
Unity/Assets/Plugins/CLRSharp/Execute/CodeBody.cs

@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CLRSharp
-{
-    public class CodeBody
-    {
-        //以后准备用自定义Body采集一遍,可以先过滤处理掉Mono.Cecil的代码中的指向,执行会更快
-        public CodeBody(CLRSharp.ICLRSharp_Environment env, Mono.Cecil.MethodDefinition _def)
-        {
-            this.method = _def;
-            Init(env);
-        }
-        public MethodParamList typelistForLoc = null;
-        Mono.Cecil.MethodDefinition method;
-        public Mono.Cecil.Cil.MethodBody bodyNative
-        {
-            get
-            {
-                return method.Body;
-            }
-        }
-        bool bInited = false;
-        public void Init(CLRSharp.ICLRSharp_Environment env)
-        {
-            if (bInited) return;
-            if(bodyNative.HasVariables)
-            {
-                typelistForLoc = new MethodParamList(env, bodyNative.Variables);
- 
-            }
-        }
-        /// <summary>
-        /// 预约的优化项目,暂不进行
-        /// </summary>
-        public void cacheBody()
-        {
-
-        }
-    }
-}

+ 0 - 5
Unity/Assets/Plugins/Libs.meta

@@ -1,5 +0,0 @@
-fileFormatVersion: 2
-guid: 02e9cecb7c4652d4cbe5eb6444de3a34
-folderAsset: yes
-DefaultImporter:
-  userData: 

BIN
Unity/Assets/Plugins/Libs/Mono.Cecil.Mdb.dll


+ 0 - 7
Unity/Assets/Plugins/Libs/Mono.Cecil.Mdb.dll.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 341a2dcb8d96096479ca8dd5d0536cc4
-MonoAssemblyImporter:
-  serializedVersion: 1
-  iconMap: {}
-  executionOrder: {}
-  userData: 

BIN
Unity/Assets/Plugins/Libs/Mono.Cecil.dll


+ 0 - 7
Unity/Assets/Plugins/Libs/Mono.Cecil.dll.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 21b9ce1cdff60e14a964b44528c1cc43
-MonoAssemblyImporter:
-  serializedVersion: 1
-  iconMap: {}
-  executionOrder: {}
-  userData: 

+ 9 - 0
Unity/Assets/Plugins/Mono.Cecil.20.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 9f7202dd5262d4d48a389953b1f78416
+folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6493bb458315e2945b924b174bc21c9b
+folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: bcb1a1f98e9190c49baa3eddf4354123
+folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 252 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Code.cs

@@ -0,0 +1,252 @@
+//
+// Code.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public enum Code {
+		Nop,
+		Break,
+		Ldarg_0,
+		Ldarg_1,
+		Ldarg_2,
+		Ldarg_3,
+		Ldloc_0,
+		Ldloc_1,
+		Ldloc_2,
+		Ldloc_3,
+		Stloc_0,
+		Stloc_1,
+		Stloc_2,
+		Stloc_3,
+		Ldarg_S,
+		Ldarga_S,
+		Starg_S,
+		Ldloc_S,
+		Ldloca_S,
+		Stloc_S,
+		Ldnull,
+		Ldc_I4_M1,
+		Ldc_I4_0,
+		Ldc_I4_1,
+		Ldc_I4_2,
+		Ldc_I4_3,
+		Ldc_I4_4,
+		Ldc_I4_5,
+		Ldc_I4_6,
+		Ldc_I4_7,
+		Ldc_I4_8,
+		Ldc_I4_S,
+		Ldc_I4,
+		Ldc_I8,
+		Ldc_R4,
+		Ldc_R8,
+		Dup,
+		Pop,
+		Jmp,
+		Call,
+		Calli,
+		Ret,
+		Br_S,
+		Brfalse_S,
+		Brtrue_S,
+		Beq_S,
+		Bge_S,
+		Bgt_S,
+		Ble_S,
+		Blt_S,
+		Bne_Un_S,
+		Bge_Un_S,
+		Bgt_Un_S,
+		Ble_Un_S,
+		Blt_Un_S,
+		Br,
+		Brfalse,
+		Brtrue,
+		Beq,
+		Bge,
+		Bgt,
+		Ble,
+		Blt,
+		Bne_Un,
+		Bge_Un,
+		Bgt_Un,
+		Ble_Un,
+		Blt_Un,
+		Switch,
+		Ldind_I1,
+		Ldind_U1,
+		Ldind_I2,
+		Ldind_U2,
+		Ldind_I4,
+		Ldind_U4,
+		Ldind_I8,
+		Ldind_I,
+		Ldind_R4,
+		Ldind_R8,
+		Ldind_Ref,
+		Stind_Ref,
+		Stind_I1,
+		Stind_I2,
+		Stind_I4,
+		Stind_I8,
+		Stind_R4,
+		Stind_R8,
+		Add,
+		Sub,
+		Mul,
+		Div,
+		Div_Un,
+		Rem,
+		Rem_Un,
+		And,
+		Or,
+		Xor,
+		Shl,
+		Shr,
+		Shr_Un,
+		Neg,
+		Not,
+		Conv_I1,
+		Conv_I2,
+		Conv_I4,
+		Conv_I8,
+		Conv_R4,
+		Conv_R8,
+		Conv_U4,
+		Conv_U8,
+		Callvirt,
+		Cpobj,
+		Ldobj,
+		Ldstr,
+		Newobj,
+		Castclass,
+		Isinst,
+		Conv_R_Un,
+		Unbox,
+		Throw,
+		Ldfld,
+		Ldflda,
+		Stfld,
+		Ldsfld,
+		Ldsflda,
+		Stsfld,
+		Stobj,
+		Conv_Ovf_I1_Un,
+		Conv_Ovf_I2_Un,
+		Conv_Ovf_I4_Un,
+		Conv_Ovf_I8_Un,
+		Conv_Ovf_U1_Un,
+		Conv_Ovf_U2_Un,
+		Conv_Ovf_U4_Un,
+		Conv_Ovf_U8_Un,
+		Conv_Ovf_I_Un,
+		Conv_Ovf_U_Un,
+		Box,
+		Newarr,
+		Ldlen,
+		Ldelema,
+		Ldelem_I1,
+		Ldelem_U1,
+		Ldelem_I2,
+		Ldelem_U2,
+		Ldelem_I4,
+		Ldelem_U4,
+		Ldelem_I8,
+		Ldelem_I,
+		Ldelem_R4,
+		Ldelem_R8,
+		Ldelem_Ref,
+		Stelem_I,
+		Stelem_I1,
+		Stelem_I2,
+		Stelem_I4,
+		Stelem_I8,
+		Stelem_R4,
+		Stelem_R8,
+		Stelem_Ref,
+		Ldelem_Any,
+		Stelem_Any,
+		Unbox_Any,
+		Conv_Ovf_I1,
+		Conv_Ovf_U1,
+		Conv_Ovf_I2,
+		Conv_Ovf_U2,
+		Conv_Ovf_I4,
+		Conv_Ovf_U4,
+		Conv_Ovf_I8,
+		Conv_Ovf_U8,
+		Refanyval,
+		Ckfinite,
+		Mkrefany,
+		Ldtoken,
+		Conv_U2,
+		Conv_U1,
+		Conv_I,
+		Conv_Ovf_I,
+		Conv_Ovf_U,
+		Add_Ovf,
+		Add_Ovf_Un,
+		Mul_Ovf,
+		Mul_Ovf_Un,
+		Sub_Ovf,
+		Sub_Ovf_Un,
+		Endfinally,
+		Leave,
+		Leave_S,
+		Stind_I,
+		Conv_U,
+		Arglist,
+		Ceq,
+		Cgt,
+		Cgt_Un,
+		Clt,
+		Clt_Un,
+		Ldftn,
+		Ldvirtftn,
+		Ldarg,
+		Ldarga,
+		Starg,
+		Ldloc,
+		Ldloca,
+		Stloc,
+		Localloc,
+		Endfilter,
+		Unaligned,
+		Volatile,
+		Tail,
+		Initobj,
+		Constrained,
+		Cpblk,
+		Initblk,
+		No,
+		Rethrow,
+		Sizeof,
+		Refanytype,
+		Readonly,
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Code.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0666e6f01bb19a0469c318132aa7d50f
+timeCreated: 1463825960
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 394 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeReader.cs

@@ -0,0 +1,394 @@
+//
+// CodeReader.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Cecil.PE;
+using Mono.Collections.Generic;
+
+using RVA = System.UInt32;
+
+namespace Mono.Cecil.Cil
+{
+
+    sealed class CodeReader : ByteBuffer
+    {
+
+        readonly internal MetadataReader reader;
+
+        int start;
+        Section code_section;
+
+        MethodDefinition method;
+        MethodBody body;
+
+        int Offset
+        {
+            get { return base.position - start; }
+        }
+
+        public CodeReader(Section section, MetadataReader reader)
+            : base(section.Data)
+        {
+            this.code_section = section;
+            this.reader = reader;
+        }
+
+        public MethodBody ReadMethodBody(MethodDefinition method)
+        {
+            this.method = method;
+            this.body = new MethodBody(method);
+
+            reader.context = method;
+
+            ReadMethodBody();
+
+            return this.body;
+        }
+
+        public void MoveTo(int rva)
+        {
+            if (!IsInSection(rva))
+            {
+                code_section = reader.image.GetSectionAtVirtualAddress((uint)rva);
+                Reset(code_section.Data);
+            }
+
+            base.position = rva - (int)code_section.VirtualAddress;
+        }
+
+        bool IsInSection(int rva)
+        {
+            return code_section.VirtualAddress <= rva && rva < code_section.VirtualAddress + code_section.SizeOfRawData;
+        }
+
+        void ReadMethodBody()
+        {
+            MoveTo(method.RVA);
+
+            var flags = ReadByte();
+            switch (flags & 0x3)
+            {
+                case 0x2: // tiny
+                    body.code_size = flags >> 2;
+                    body.MaxStackSize = 8;
+                    ReadCode();
+                    break;
+                case 0x3: // fat
+                    base.position--;
+                    ReadFatMethod();
+                    break;
+                default:
+                    throw new InvalidOperationException();
+            }
+
+            var symbol_reader = reader.module.symbol_reader;
+
+            if (symbol_reader != null)
+            {
+                var instructions = body.Instructions;
+                symbol_reader.Read(body, offset => GetInstruction(instructions, offset));
+            }
+        }
+
+        void ReadFatMethod()
+        {
+            var flags = ReadUInt16();
+            body.max_stack_size = ReadUInt16();
+            body.code_size = (int)ReadUInt32();
+            body.local_var_token = new MetadataToken(ReadUInt32());
+            body.init_locals = (flags & 0x10) != 0;
+
+            if (body.local_var_token.RID != 0)
+                body.variables = ReadVariables(body.local_var_token);
+
+            ReadCode();
+
+            if ((flags & 0x8) != 0)
+                ReadSection();
+        }
+
+        public VariableDefinitionCollection ReadVariables(MetadataToken local_var_token)
+        {
+            var position = reader.position;
+            var variables = reader.ReadVariables(local_var_token);
+            reader.position = position;
+
+            return variables;
+        }
+
+        void ReadCode()
+        {
+            start = position;
+            var code_size = body.code_size;
+
+            if (code_size < 0 || buffer.Length <= (uint)(code_size + position))
+                code_size = 0;
+
+            var end = start + code_size;
+            var instructions = body.instructions = new InstructionCollection((code_size + 1) / 2);
+
+            while (position < end)
+            {
+                var offset = base.position - start;
+                var opcode = ReadOpCode();
+                var current = new Instruction(offset, opcode);
+
+                if (opcode.OperandType != OperandType.InlineNone)
+                    current.operand = ReadOperand(current);
+
+                instructions.Add(current);
+            }
+
+            ResolveBranches(instructions);
+        }
+
+        OpCode ReadOpCode()
+        {
+            var il_opcode = ReadByte();
+            return il_opcode != 0xfe
+                ? OpCodes.OneByteOpCode[il_opcode]
+                : OpCodes.TwoBytesOpCode[ReadByte()];
+        }
+
+        object ReadOperand(Instruction instruction)
+        {
+            switch (instruction.opcode.OperandType)
+            {
+                case OperandType.InlineSwitch:
+                    var length = ReadInt32();
+                    var base_offset = Offset + (4 * length);
+                    var branches = new int[length];
+                    for (int i = 0; i < length; i++)
+                        branches[i] = base_offset + ReadInt32();
+                    return branches;
+                case OperandType.ShortInlineBrTarget:
+                    return ReadSByte() + Offset;
+                case OperandType.InlineBrTarget:
+                    return ReadInt32() + Offset;
+                case OperandType.ShortInlineI:
+                    if (instruction.opcode == OpCodes.Ldc_I4_S)
+                        return ReadSByte();
+
+                    return ReadByte();
+                case OperandType.InlineI:
+                    return ReadInt32();
+                case OperandType.ShortInlineR:
+                    return ReadSingle();
+                case OperandType.InlineR:
+                    return ReadDouble();
+                case OperandType.InlineI8:
+                    return ReadInt64();
+                case OperandType.ShortInlineVar:
+                    return GetVariable(ReadByte());
+                case OperandType.InlineVar:
+                    return GetVariable(ReadUInt16());
+                case OperandType.ShortInlineArg:
+                    return GetParameter(ReadByte());
+                case OperandType.InlineArg:
+                    return GetParameter(ReadUInt16());
+                case OperandType.InlineSig:
+                    return GetCallSite(ReadToken());
+                case OperandType.InlineString:
+                    return GetString(ReadToken());
+                case OperandType.InlineTok:
+                case OperandType.InlineType:
+                case OperandType.InlineMethod:
+                case OperandType.InlineField:
+                    return reader.LookupToken(ReadToken());
+                default:
+                    throw new NotSupportedException();
+            }
+        }
+
+        public string GetString(MetadataToken token)
+        {
+            return reader.image.UserStringHeap.Read(token.RID);
+        }
+
+        public ParameterDefinition GetParameter(int index)
+        {
+            return Mixin.GetParameter(body, index);
+        }
+
+        public VariableDefinition GetVariable(int index)
+        {
+            return Mixin.GetVariable(body, index);
+        }
+
+        public CallSite GetCallSite(MetadataToken token)
+        {
+            return reader.ReadCallSite(token);
+        }
+
+        void ResolveBranches(Collection<Instruction> instructions)
+        {
+            var items = instructions.items;
+            var size = instructions.size;
+
+            for (int i = 0; i < size; i++)
+            {
+                var instruction = items[i];
+                switch (instruction.opcode.OperandType)
+                {
+                    case OperandType.ShortInlineBrTarget:
+                    case OperandType.InlineBrTarget:
+                        instruction.operand = GetInstruction((int)instruction.operand);
+                        break;
+                    case OperandType.InlineSwitch:
+                        var offsets = (int[])instruction.operand;
+                        var branches = new Instruction[offsets.Length];
+                        for (int j = 0; j < offsets.Length; j++)
+                            branches[j] = GetInstruction(offsets[j]);
+
+                        instruction.operand = branches;
+                        break;
+                }
+            }
+        }
+
+        Instruction GetInstruction(int offset)
+        {
+            return GetInstruction(body.Instructions, offset);
+        }
+
+        static Instruction GetInstruction(Collection<Instruction> instructions, int offset)
+        {
+            var size = instructions.size;
+            var items = instructions.items;
+            if (offset < 0 || offset > items[size - 1].offset)
+                return null;
+
+            int min = 0;
+            int max = size - 1;
+            while (min <= max)
+            {
+                int mid = min + ((max - min) / 2);
+                var instruction = items[mid];
+                var instruction_offset = instruction.offset;
+
+                if (offset == instruction_offset)
+                    return instruction;
+
+                if (offset < instruction_offset)
+                    max = mid - 1;
+                else
+                    min = mid + 1;
+            }
+
+            return null;
+        }
+
+        void ReadSection()
+        {
+            Align(4);
+
+            const byte fat_format = 0x40;
+            const byte more_sects = 0x80;
+
+            var flags = ReadByte();
+            if ((flags & fat_format) == 0)
+                ReadSmallSection();
+            else
+                ReadFatSection();
+
+            if ((flags & more_sects) != 0)
+                ReadSection();
+        }
+
+        void ReadSmallSection()
+        {
+            var count = ReadByte() / 12;
+            Advance(2);
+
+            ReadExceptionHandlers(
+                count,
+                () => (int)ReadUInt16(),
+                () => (int)ReadByte());
+        }
+
+        void ReadFatSection()
+        {
+            position--;
+            var count = (ReadInt32() >> 8) / 24;
+
+            ReadExceptionHandlers(
+                count,
+                ReadInt32,
+                ReadInt32);
+        }
+
+        // inline ?
+        void ReadExceptionHandlers(int count, Func<int> read_entry, Func<int> read_length)
+        {
+            for (int i = 0; i < count; i++)
+            {
+                var handler = new ExceptionHandler(
+                    (ExceptionHandlerType)(read_entry() & 0x7));
+
+                handler.TryStart = GetInstruction(read_entry());
+                handler.TryEnd = GetInstruction(handler.TryStart.Offset + read_length());
+
+                handler.HandlerStart = GetInstruction(read_entry());
+                handler.HandlerEnd = GetInstruction(handler.HandlerStart.Offset + read_length());
+
+                ReadExceptionHandlerSpecific(handler);
+
+                this.body.ExceptionHandlers.Add(handler);
+            }
+        }
+
+        void ReadExceptionHandlerSpecific(ExceptionHandler handler)
+        {
+            switch (handler.HandlerType)
+            {
+                case ExceptionHandlerType.Catch:
+                    handler.CatchType = (TypeReference)reader.LookupToken(ReadToken());
+                    break;
+                case ExceptionHandlerType.Filter:
+                    handler.FilterStart = GetInstruction(ReadInt32());
+                    break;
+                default:
+                    Advance(4);
+                    break;
+            }
+        }
+
+        void Align(int align)
+        {
+            align--;
+            Advance(((position + align) & ~align) - position);
+        }
+
+        public MetadataToken ReadToken()
+        {
+            return new MetadataToken(ReadUInt32());
+        }
+
+    }
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeReader.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 21014d572ca330947a91728d7d125280
+timeCreated: 1463825961
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeWriter.cs

@@ -0,0 +1,38 @@
+//
+// CodeWriter.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Mono.Collections.Generic;
+
+using Mono.Cecil.Metadata;
+using Mono.Cecil.PE;
+
+using RVA = System.UInt32;
+

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/CodeWriter.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7b6b27f5c4594e241a28c04d9b559370
+timeCreated: 1463825963
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 112 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Document.cs

@@ -0,0 +1,112 @@
+//
+// Document.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Mono.Cecil.Cil {
+
+	public enum DocumentType {
+		Other,
+		Text,
+	}
+
+	public enum DocumentHashAlgorithm {
+		None,
+		MD5,
+		SHA1,
+	}
+
+	public enum DocumentLanguage {
+		Other,
+		C,
+		Cpp,
+		CSharp,
+		Basic,
+		Java,
+		Cobol,
+		Pascal,
+		Cil,
+		JScript,
+		Smc,
+		MCpp,
+		FSharp,
+	}
+
+	public enum DocumentLanguageVendor {
+		Other,
+		Microsoft,
+	}
+
+	public sealed class Document {
+
+		string url;
+
+		byte type;
+		byte hash_algorithm;
+		byte language;
+		byte language_vendor;
+
+		byte [] hash;
+
+		public string Url {
+			get { return url; }
+			set { url = value; }
+		}
+
+		public DocumentType Type {
+			get { return (DocumentType) type; }
+			set { type = (byte) value; }
+		}
+
+		public DocumentHashAlgorithm HashAlgorithm {
+			get { return (DocumentHashAlgorithm) hash_algorithm; }
+			set { hash_algorithm = (byte) value; }
+		}
+
+		public DocumentLanguage Language {
+			get { return (DocumentLanguage) language; }
+			set { language = (byte) value; }
+		}
+
+		public DocumentLanguageVendor LanguageVendor {
+			get { return (DocumentLanguageVendor) language_vendor; }
+			set { language_vendor = (byte) value; }
+		}
+
+		public byte [] Hash {
+			get { return hash; }
+			set { hash = value; }
+		}
+
+		public Document (string url)
+		{
+			this.url = url;
+			this.hash = Empty<byte>.Array;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Document.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 482e3a42afc39e042ac7f9552de2a3fd
+timeCreated: 1463825961
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 89 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ExceptionHandler.cs

@@ -0,0 +1,89 @@
+//
+// ExceptionHandler.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public enum ExceptionHandlerType {
+		Catch = 0,
+		Filter = 1,
+		Finally = 2,
+		Fault = 4,
+	}
+
+	public sealed class ExceptionHandler {
+
+		Instruction try_start;
+		Instruction try_end;
+		Instruction filter_start;
+		Instruction handler_start;
+		Instruction handler_end;
+
+		TypeReference catch_type;
+		ExceptionHandlerType handler_type;
+
+		public Instruction TryStart {
+			get { return try_start; }
+			set { try_start = value; }
+		}
+
+		public Instruction TryEnd {
+			get { return try_end; }
+			set { try_end = value; }
+		}
+
+		public Instruction FilterStart {
+			get { return filter_start; }
+			set { filter_start = value; }
+		}
+
+		public Instruction HandlerStart {
+			get { return handler_start; }
+			set { handler_start = value; }
+		}
+
+		public Instruction HandlerEnd {
+			get { return handler_end; }
+			set { handler_end = value; }
+		}
+
+		public TypeReference CatchType {
+			get { return catch_type; }
+			set { catch_type = value; }
+		}
+
+		public ExceptionHandlerType HandlerType {
+			get { return handler_type; }
+			set { handler_type = value; }
+		}
+
+		public ExceptionHandler (ExceptionHandlerType handlerType)
+		{
+			this.handler_type = handlerType;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ExceptionHandler.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0184ffeda340ced43a1bc0263dee5856
+timeCreated: 1463825960
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 278 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ILProcessor.cs

@@ -0,0 +1,278 @@
+//
+// ILProcessor.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Collections.Generic;
+
+namespace Mono.Cecil.Cil {
+
+	public sealed class ILProcessor {
+
+		readonly MethodBody body;
+		readonly Collection<Instruction> instructions;
+
+		public MethodBody Body {
+			get { return body; }
+		}
+
+		internal ILProcessor (MethodBody body)
+		{
+			this.body = body;
+			this.instructions = body.Instructions;
+		}
+
+		public Instruction Create (OpCode opcode)
+		{
+			return Instruction.Create (opcode);
+		}
+
+		public Instruction Create (OpCode opcode, TypeReference type)
+		{
+			return Instruction.Create (opcode, type);
+		}
+
+		public Instruction Create (OpCode opcode, CallSite site)
+		{
+			return Instruction.Create (opcode, site);
+		}
+
+		public Instruction Create (OpCode opcode, MethodReference method)
+		{
+			return Instruction.Create (opcode, method);
+		}
+
+		public Instruction Create (OpCode opcode, FieldReference field)
+		{
+			return Instruction.Create (opcode, field);
+		}
+
+		public Instruction Create (OpCode opcode, string value)
+		{
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, sbyte value)
+		{
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, byte value)
+		{
+			if (opcode.OperandType == OperandType.ShortInlineVar)
+				return Instruction.Create (opcode, body.Variables [value]);
+
+			if (opcode.OperandType == OperandType.ShortInlineArg)
+				return Instruction.Create (opcode, Mixin.GetParameter (body,value));
+
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, int value)
+		{
+			if (opcode.OperandType == OperandType.InlineVar)
+				return Instruction.Create (opcode, body.Variables [value]);
+
+			if (opcode.OperandType == OperandType.InlineArg)
+				return Instruction.Create (opcode, Mixin.GetParameter (body,value));
+
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, long value)
+		{
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, float value)
+		{
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, double value)
+		{
+			return Instruction.Create (opcode, value);
+		}
+
+		public Instruction Create (OpCode opcode, Instruction target)
+		{
+			return Instruction.Create (opcode, target);
+		}
+
+		public Instruction Create (OpCode opcode, Instruction [] targets)
+		{
+			return Instruction.Create (opcode, targets);
+		}
+
+		public Instruction Create (OpCode opcode, VariableDefinition variable)
+		{
+			return Instruction.Create (opcode, variable);
+		}
+
+		public Instruction Create (OpCode opcode, ParameterDefinition parameter)
+		{
+			return Instruction.Create (opcode, parameter);
+		}
+
+		public void Emit (OpCode opcode)
+		{
+			Append (Create (opcode));
+		}
+
+		public void Emit (OpCode opcode, TypeReference type)
+		{
+			Append (Create (opcode, type));
+		}
+
+		public void Emit (OpCode opcode, MethodReference method)
+		{
+			Append (Create (opcode, method));
+		}
+
+		public void Emit (OpCode opcode, CallSite site)
+		{
+			Append (Create (opcode, site));
+		}
+
+		public void Emit (OpCode opcode, FieldReference field)
+		{
+			Append (Create (opcode, field));
+		}
+
+		public void Emit (OpCode opcode, string value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, byte value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, sbyte value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, int value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, long value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, float value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, double value)
+		{
+			Append (Create (opcode, value));
+		}
+
+		public void Emit (OpCode opcode, Instruction target)
+		{
+			Append (Create (opcode, target));
+		}
+
+		public void Emit (OpCode opcode, Instruction [] targets)
+		{
+			Append (Create (opcode, targets));
+		}
+
+		public void Emit (OpCode opcode, VariableDefinition variable)
+		{
+			Append (Create (opcode, variable));
+		}
+
+		public void Emit (OpCode opcode, ParameterDefinition parameter)
+		{
+			Append (Create (opcode, parameter));
+		}
+
+		public void InsertBefore (Instruction target, Instruction instruction)
+		{
+			if (target == null)
+				throw new ArgumentNullException ("target");
+			if (instruction == null)
+				throw new ArgumentNullException ("instruction");
+
+			var index = instructions.IndexOf (target);
+			if (index == -1)
+				throw new ArgumentOutOfRangeException ("target");
+
+			instructions.Insert (index, instruction);
+		}
+
+		public void InsertAfter (Instruction target, Instruction instruction)
+		{
+			if (target == null)
+				throw new ArgumentNullException ("target");
+			if (instruction == null)
+				throw new ArgumentNullException ("instruction");
+
+			var index = instructions.IndexOf (target);
+			if (index == -1)
+				throw new ArgumentOutOfRangeException ("target");
+
+			instructions.Insert (index + 1, instruction);
+		}
+
+		public void Append (Instruction instruction)
+		{
+			if (instruction == null)
+				throw new ArgumentNullException ("instruction");
+
+			instructions.Add (instruction);
+		}
+
+		public void Replace (Instruction target, Instruction instruction)
+		{
+			if (target == null)
+				throw new ArgumentNullException ("target");
+			if (instruction == null)
+				throw new ArgumentNullException ("instruction");
+
+			InsertAfter (target, instruction);
+			Remove (target);
+		}
+
+		public void Remove (Instruction instruction)
+		{
+			if (instruction == null)
+				throw new ArgumentNullException ("instruction");
+
+			if (!instructions.Remove (instruction))
+				throw new ArgumentOutOfRangeException ("instruction");
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/ILProcessor.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b138a591a4229fa42a965957e1f615f8
+timeCreated: 1463825964
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 321 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Instruction.cs

@@ -0,0 +1,321 @@
+//
+// Instruction.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+
+namespace Mono.Cecil.Cil {
+
+	public sealed class Instruction {
+
+		internal int offset;
+		internal OpCode opcode;
+		internal object operand;
+
+		internal Instruction previous;
+		internal Instruction next;
+
+		SequencePoint sequence_point;
+
+		public int Offset {
+			get { return offset; }
+			set { offset = value; }
+		}
+
+		public OpCode OpCode {
+			get { return opcode; }
+			set { opcode = value; }
+		}
+
+		public object Operand {
+			get { return operand; }
+			set { operand = value; }
+		}
+
+		public Instruction Previous {
+			get { return previous; }
+			set { previous = value; }
+		}
+
+		public Instruction Next {
+			get { return next; }
+			set { next = value; }
+		}
+
+		public SequencePoint SequencePoint {
+			get { return sequence_point; }
+			set { sequence_point = value; }
+		}
+
+		internal Instruction (int offset, OpCode opCode)
+		{
+			this.offset = offset;
+			this.opcode = opCode;
+		}
+
+		internal Instruction (OpCode opcode, object operand)
+		{
+			this.opcode = opcode;
+			this.operand = operand;
+		}
+
+		public int GetSize ()
+		{
+			int size = opcode.Size;
+
+			switch (opcode.OperandType) {
+			case OperandType.InlineSwitch:
+				return size + (1 + ((Instruction []) operand).Length) * 4;
+			case OperandType.InlineI8:
+			case OperandType.InlineR:
+				return size + 8;
+			case OperandType.InlineBrTarget:
+			case OperandType.InlineField:
+			case OperandType.InlineI:
+			case OperandType.InlineMethod:
+			case OperandType.InlineString:
+			case OperandType.InlineTok:
+			case OperandType.InlineType:
+			case OperandType.ShortInlineR:
+			case OperandType.InlineSig:
+				return size + 4;
+			case OperandType.InlineArg:
+			case OperandType.InlineVar:
+				return size + 2;
+			case OperandType.ShortInlineBrTarget:
+			case OperandType.ShortInlineI:
+			case OperandType.ShortInlineArg:
+			case OperandType.ShortInlineVar:
+				return size + 1;
+			default:
+				return size;
+			}
+		}
+
+		public override string ToString ()
+		{
+			var instruction = new StringBuilder ();
+
+			AppendLabel (instruction, this);
+			instruction.Append (':');
+			instruction.Append (' ');
+			instruction.Append (opcode.Name);
+
+			if (operand == null)
+				return instruction.ToString ();
+
+			instruction.Append (' ');
+
+			switch (opcode.OperandType) {
+			case OperandType.ShortInlineBrTarget:
+			case OperandType.InlineBrTarget:
+				AppendLabel (instruction, (Instruction) operand);
+				break;
+			case OperandType.InlineSwitch:
+				var labels = (Instruction []) operand;
+				for (int i = 0; i < labels.Length; i++) {
+					if (i > 0)
+						instruction.Append (',');
+
+					AppendLabel (instruction, labels [i]);
+				}
+				break;
+			case OperandType.InlineString:
+				instruction.Append ('\"');
+				instruction.Append (operand);
+				instruction.Append ('\"');
+				break;
+			default:
+				instruction.Append (operand);
+				break;
+			}
+
+			return instruction.ToString ();
+		}
+
+		static void AppendLabel (StringBuilder builder, Instruction instruction)
+		{
+			builder.Append ("IL_");
+			builder.Append (instruction.offset.ToString ("x4"));
+		}
+
+		public static Instruction Create (OpCode opcode)
+		{
+			if (opcode.OperandType != OperandType.InlineNone)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, null);
+		}
+
+		public static Instruction Create (OpCode opcode, TypeReference type)
+		{
+			if (type == null)
+				throw new ArgumentNullException ("type");
+			if (opcode.OperandType != OperandType.InlineType &&
+				opcode.OperandType != OperandType.InlineTok)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, type);
+		}
+
+		public static Instruction Create (OpCode opcode, CallSite site)
+		{
+			if (site == null)
+				throw new ArgumentNullException ("site");
+			if (opcode.Code != Code.Calli)
+				throw new ArgumentException ("code");
+
+			return new Instruction (opcode, site);
+		}
+
+		public static Instruction Create (OpCode opcode, MethodReference method)
+		{
+			if (method == null)
+				throw new ArgumentNullException ("method");
+			if (opcode.OperandType != OperandType.InlineMethod &&
+				opcode.OperandType != OperandType.InlineTok)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, method);
+		}
+
+		public static Instruction Create (OpCode opcode, FieldReference field)
+		{
+			if (field == null)
+				throw new ArgumentNullException ("field");
+			if (opcode.OperandType != OperandType.InlineField &&
+				opcode.OperandType != OperandType.InlineTok)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, field);
+		}
+
+		public static Instruction Create (OpCode opcode, string value)
+		{
+			if (value == null)
+				throw new ArgumentNullException ("value");
+			if (opcode.OperandType != OperandType.InlineString)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, sbyte value)
+		{
+			if (opcode.OperandType != OperandType.ShortInlineI &&
+				opcode != OpCodes.Ldc_I4_S)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, byte value)
+		{
+			if (opcode.OperandType != OperandType.ShortInlineI ||
+				opcode == OpCodes.Ldc_I4_S)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, int value)
+		{
+			if (opcode.OperandType != OperandType.InlineI)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, long value)
+		{
+			if (opcode.OperandType != OperandType.InlineI8)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, float value)
+		{
+			if (opcode.OperandType != OperandType.ShortInlineR)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, double value)
+		{
+			if (opcode.OperandType != OperandType.InlineR)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, value);
+		}
+
+		public static Instruction Create (OpCode opcode, Instruction target)
+		{
+			if (target == null)
+				throw new ArgumentNullException ("target");
+			if (opcode.OperandType != OperandType.InlineBrTarget &&
+				opcode.OperandType != OperandType.ShortInlineBrTarget)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, target);
+		}
+
+		public static Instruction Create (OpCode opcode, Instruction [] targets)
+		{
+			if (targets == null)
+				throw new ArgumentNullException ("targets");
+			if (opcode.OperandType != OperandType.InlineSwitch)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, targets);
+		}
+
+		public static Instruction Create (OpCode opcode, VariableDefinition variable)
+		{
+			if (variable == null)
+				throw new ArgumentNullException ("variable");
+			if (opcode.OperandType != OperandType.ShortInlineVar &&
+				opcode.OperandType != OperandType.InlineVar)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, variable);
+		}
+
+		public static Instruction Create (OpCode opcode, ParameterDefinition parameter)
+		{
+			if (parameter == null)
+				throw new ArgumentNullException ("parameter");
+			if (opcode.OperandType != OperandType.ShortInlineArg &&
+				opcode.OperandType != OperandType.InlineArg)
+				throw new ArgumentException ("opcode");
+
+			return new Instruction (opcode, parameter);
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Instruction.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 00d171116a4407f4c97d7ba1e327e290
+timeCreated: 1463825960
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 267 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/MethodBody.cs

@@ -0,0 +1,267 @@
+//
+// MethodBody.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+
+using Mono.Collections.Generic;
+
+namespace Mono.Cecil.Cil
+{
+
+    public sealed class MethodBody : IVariableDefinitionProvider
+    {
+
+        readonly internal MethodDefinition method;
+
+        internal ParameterDefinition this_parameter;
+        internal int max_stack_size;
+        internal int code_size;
+        internal bool init_locals;
+        internal MetadataToken local_var_token;
+
+        internal Collection<Instruction> instructions;
+        internal Collection<ExceptionHandler> exceptions;
+        internal Collection<VariableDefinition> variables;
+        Scope scope;
+
+        public MethodDefinition Method
+        {
+            get { return method; }
+        }
+
+        public int MaxStackSize
+        {
+            get { return max_stack_size; }
+            set { max_stack_size = value; }
+        }
+
+        public int CodeSize
+        {
+            get { return code_size; }
+        }
+
+        public bool InitLocals
+        {
+            get { return init_locals; }
+            set { init_locals = value; }
+        }
+
+        public MetadataToken LocalVarToken
+        {
+            get { return local_var_token; }
+            set { local_var_token = value; }
+        }
+
+        public Collection<Instruction> Instructions
+        {
+            get { return instructions ?? (instructions = new InstructionCollection()); }
+        }
+
+        public bool HasExceptionHandlers
+        {
+            get { return !Mixin.IsNullOrEmpty(exceptions); }
+        }
+
+        public Collection<ExceptionHandler> ExceptionHandlers
+        {
+            get { return exceptions ?? (exceptions = new Collection<ExceptionHandler>()); }
+        }
+
+        public bool HasVariables
+        {
+            get { return !Mixin.IsNullOrEmpty(variables); }
+        }
+
+        public Collection<VariableDefinition> Variables
+        {
+            get { return variables ?? (variables = new VariableDefinitionCollection()); }
+        }
+
+        public Scope Scope
+        {
+            get { return scope; }
+            set { scope = value; }
+        }
+
+        public ParameterDefinition ThisParameter
+        {
+            get
+            {
+                if (method == null || method.DeclaringType == null)
+                    throw new NotSupportedException();
+
+                if (!method.HasThis)
+                    return null;
+
+                if (this_parameter == null)
+                    this_parameter = ThisParameterFor(method);
+
+                return this_parameter;
+            }
+        }
+
+        static ParameterDefinition ThisParameterFor(MethodDefinition method)
+        {
+            var declaring_type = method.DeclaringType;
+            var type = declaring_type.IsValueType || declaring_type.IsPrimitive
+                ? new PointerType(declaring_type)
+                : declaring_type as TypeReference;
+
+            return new ParameterDefinition(type, method);
+        }
+
+        public MethodBody(MethodDefinition method)
+        {
+            this.method = method;
+        }
+
+        public ILProcessor GetILProcessor()
+        {
+            return new ILProcessor(this);
+        }
+    }
+
+    public interface IVariableDefinitionProvider
+    {
+        bool HasVariables { get; }
+        Collection<VariableDefinition> Variables { get; }
+    }
+
+    class VariableDefinitionCollection : Collection<VariableDefinition>
+    {
+
+        internal VariableDefinitionCollection()
+        {
+        }
+
+        internal VariableDefinitionCollection(int capacity)
+            : base(capacity)
+        {
+        }
+
+        protected override void OnAdd(VariableDefinition item, int index)
+        {
+            item.index = index;
+        }
+
+        protected override void OnInsert(VariableDefinition item, int index)
+        {
+            item.index = index;
+
+            for (int i = index; i < size; i++)
+                items[i].index = i + 1;
+        }
+
+        protected override void OnSet(VariableDefinition item, int index)
+        {
+            item.index = index;
+        }
+
+        protected override void OnRemove(VariableDefinition item, int index)
+        {
+            item.index = -1;
+
+            for (int i = index + 1; i < size; i++)
+                items[i].index = i - 1;
+        }
+    }
+
+    class InstructionCollection : Collection<Instruction>
+    {
+
+        internal InstructionCollection()
+        {
+        }
+
+        internal InstructionCollection(int capacity)
+            : base(capacity)
+        {
+        }
+
+        protected override void OnAdd(Instruction item, int index)
+        {
+            if (index == 0)
+                return;
+
+            var previous = items[index - 1];
+            previous.next = item;
+            item.previous = previous;
+        }
+
+        protected override void OnInsert(Instruction item, int index)
+        {
+            if (size == 0)
+                return;
+
+            var current = items[index];
+            if (current == null)
+            {
+                var last = items[index - 1];
+                last.next = item;
+                item.previous = last;
+                return;
+            }
+
+            var previous = current.previous;
+            if (previous != null)
+            {
+                previous.next = item;
+                item.previous = previous;
+            }
+
+            current.previous = item;
+            item.next = current;
+        }
+
+        protected override void OnSet(Instruction item, int index)
+        {
+            var current = items[index];
+
+            item.previous = current.previous;
+            item.next = current.next;
+
+            current.previous = null;
+            current.next = null;
+        }
+
+        protected override void OnRemove(Instruction item, int index)
+        {
+            var previous = item.previous;
+            if (previous != null)
+                previous.next = item.next;
+
+            var next = item.next;
+            if (next != null)
+                next.previous = item.previous;
+
+            item.previous = null;
+            item.next = null;
+        }
+    }
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/MethodBody.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2caf9dbb9f3343a4c8f30d79a8a1af48
+timeCreated: 1463825961
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 455 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCode.cs

@@ -0,0 +1,455 @@
+//
+// OpCode.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public enum FlowControl {
+		Branch,
+		Break,
+		Call,
+		Cond_Branch,
+		Meta,
+		Next,
+		Phi,
+		Return,
+		Throw,
+	}
+
+	public enum OpCodeType {
+		Annotation,
+		Macro,
+		Nternal,
+		Objmodel,
+		Prefix,
+		Primitive,
+	}
+
+	public enum OperandType {
+		InlineBrTarget,
+		InlineField,
+		InlineI,
+		InlineI8,
+		InlineMethod,
+		InlineNone,
+		InlinePhi,
+		InlineR,
+		InlineSig,
+		InlineString,
+		InlineSwitch,
+		InlineTok,
+		InlineType,
+		InlineVar,
+		InlineArg,
+		ShortInlineBrTarget,
+		ShortInlineI,
+		ShortInlineR,
+		ShortInlineVar,
+		ShortInlineArg,
+	}
+
+	public enum StackBehaviour {
+		Pop0,
+		Pop1,
+		Pop1_pop1,
+		Popi,
+		Popi_pop1,
+		Popi_popi,
+		Popi_popi8,
+		Popi_popi_popi,
+		Popi_popr4,
+		Popi_popr8,
+		Popref,
+		Popref_pop1,
+		Popref_popi,
+		Popref_popi_popi,
+		Popref_popi_popi8,
+		Popref_popi_popr4,
+		Popref_popi_popr8,
+		Popref_popi_popref,
+		PopAll,
+		Push0,
+		Push1,
+		Push1_push1,
+		Pushi,
+		Pushi8,
+		Pushr4,
+		Pushr8,
+		Pushref,
+		Varpop,
+		Varpush,
+	}
+
+	public struct OpCode {
+
+		readonly byte op1;
+		readonly byte op2;
+		readonly byte code;
+		readonly byte flow_control;
+		readonly byte opcode_type;
+		readonly byte operand_type;
+		readonly byte stack_behavior_pop;
+		readonly byte stack_behavior_push;
+
+		public string Name {
+			get { return OpCodeNames.names [(int) Code]; }
+		}
+
+		public int Size {
+			get { return op1 == 0xff ? 1 : 2; }
+		}
+
+		public byte Op1 {
+			get { return op1; }
+		}
+
+		public byte Op2 {
+			get { return op2; }
+		}
+
+		public short Value {
+			get { return op1 == 0xff ? op2 : (short) ((op1 << 8) | op2); }
+		}
+
+		public Code Code {
+			get { return (Code) code; }
+		}
+
+		public FlowControl FlowControl {
+			get { return (FlowControl) flow_control; }
+		}
+
+		public OpCodeType OpCodeType {
+			get { return (OpCodeType) opcode_type; }
+		}
+
+		public OperandType OperandType {
+			get { return (OperandType) operand_type; }
+		}
+
+		public StackBehaviour StackBehaviourPop {
+			get { return (StackBehaviour) stack_behavior_pop; }
+		}
+
+		public StackBehaviour StackBehaviourPush {
+			get { return (StackBehaviour) stack_behavior_push; }
+		}
+
+		internal OpCode (int x, int y)
+		{
+			this.op1 = (byte) ((x >> 0) & 0xff);
+			this.op2 = (byte) ((x >> 8) & 0xff);
+			this.code = (byte) ((x >> 16) & 0xff);
+			this.flow_control = (byte) ((x >> 24) & 0xff);
+
+			this.opcode_type = (byte) ((y >> 0) & 0xff);
+			this.operand_type = (byte) ((y >> 8) & 0xff);
+			this.stack_behavior_pop = (byte) ((y >> 16) & 0xff);
+			this.stack_behavior_push = (byte) ((y >> 24) & 0xff);
+
+			if (op1 == 0xff)
+				OpCodes.OneByteOpCode [op2] = this;
+			else
+				OpCodes.TwoBytesOpCode [op2] = this;
+		}
+
+		public override int GetHashCode ()
+		{
+			return Value;
+		}
+
+		public override bool Equals (object obj)
+		{
+			if (!(obj is OpCode))
+				return false;
+
+			var opcode = (OpCode) obj;
+			return op1 == opcode.op1 && op2 == opcode.op2;
+		}
+
+		public bool Equals (OpCode opcode)
+		{
+			return op1 == opcode.op1 && op2 == opcode.op2;
+		}
+
+		public static bool operator == (OpCode one, OpCode other)
+		{
+			return one.op1 == other.op1 && one.op2 == other.op2;
+		}
+
+		public static bool operator != (OpCode one, OpCode other)
+		{
+			return one.op1 != other.op1 || one.op2 != other.op2;
+		}
+
+		public override string ToString ()
+		{
+			return Name;
+		}
+	}
+
+	static class OpCodeNames {
+
+		internal static readonly string [] names;
+
+		static OpCodeNames ()
+		{
+			var table = new byte [] {
+				3, 110, 111, 112,
+				5, 98, 114, 101, 97, 107,
+				7, 108, 100, 97, 114, 103, 46, 48,
+				7, 108, 100, 97, 114, 103, 46, 49,
+				7, 108, 100, 97, 114, 103, 46, 50,
+				7, 108, 100, 97, 114, 103, 46, 51,
+				7, 108, 100, 108, 111, 99, 46, 48,
+				7, 108, 100, 108, 111, 99, 46, 49,
+				7, 108, 100, 108, 111, 99, 46, 50,
+				7, 108, 100, 108, 111, 99, 46, 51,
+				7, 115, 116, 108, 111, 99, 46, 48,
+				7, 115, 116, 108, 111, 99, 46, 49,
+				7, 115, 116, 108, 111, 99, 46, 50,
+				7, 115, 116, 108, 111, 99, 46, 51,
+				7, 108, 100, 97, 114, 103, 46, 115,
+				8, 108, 100, 97, 114, 103, 97, 46, 115,
+				7, 115, 116, 97, 114, 103, 46, 115,
+				7, 108, 100, 108, 111, 99, 46, 115,
+				8, 108, 100, 108, 111, 99, 97, 46, 115,
+				7, 115, 116, 108, 111, 99, 46, 115,
+				6, 108, 100, 110, 117, 108, 108,
+				9, 108, 100, 99, 46, 105, 52, 46, 109, 49,
+				8, 108, 100, 99, 46, 105, 52, 46, 48,
+				8, 108, 100, 99, 46, 105, 52, 46, 49,
+				8, 108, 100, 99, 46, 105, 52, 46, 50,
+				8, 108, 100, 99, 46, 105, 52, 46, 51,
+				8, 108, 100, 99, 46, 105, 52, 46, 52,
+				8, 108, 100, 99, 46, 105, 52, 46, 53,
+				8, 108, 100, 99, 46, 105, 52, 46, 54,
+				8, 108, 100, 99, 46, 105, 52, 46, 55,
+				8, 108, 100, 99, 46, 105, 52, 46, 56,
+				8, 108, 100, 99, 46, 105, 52, 46, 115,
+				6, 108, 100, 99, 46, 105, 52,
+				6, 108, 100, 99, 46, 105, 56,
+				6, 108, 100, 99, 46, 114, 52,
+				6, 108, 100, 99, 46, 114, 56,
+				3, 100, 117, 112,
+				3, 112, 111, 112,
+				3, 106, 109, 112,
+				4, 99, 97, 108, 108,
+				5, 99, 97, 108, 108, 105,
+				3, 114, 101, 116,
+				4, 98, 114, 46, 115,
+				9, 98, 114, 102, 97, 108, 115, 101, 46, 115,
+				8, 98, 114, 116, 114, 117, 101, 46, 115,
+				5, 98, 101, 113, 46, 115,
+				5, 98, 103, 101, 46, 115,
+				5, 98, 103, 116, 46, 115,
+				5, 98, 108, 101, 46, 115,
+				5, 98, 108, 116, 46, 115,
+				8, 98, 110, 101, 46, 117, 110, 46, 115,
+				8, 98, 103, 101, 46, 117, 110, 46, 115,
+				8, 98, 103, 116, 46, 117, 110, 46, 115,
+				8, 98, 108, 101, 46, 117, 110, 46, 115,
+				8, 98, 108, 116, 46, 117, 110, 46, 115,
+				2, 98, 114,
+				7, 98, 114, 102, 97, 108, 115, 101,
+				6, 98, 114, 116, 114, 117, 101,
+				3, 98, 101, 113,
+				3, 98, 103, 101,
+				3, 98, 103, 116,
+				3, 98, 108, 101,
+				3, 98, 108, 116,
+				6, 98, 110, 101, 46, 117, 110,
+				6, 98, 103, 101, 46, 117, 110,
+				6, 98, 103, 116, 46, 117, 110,
+				6, 98, 108, 101, 46, 117, 110,
+				6, 98, 108, 116, 46, 117, 110,
+				6, 115, 119, 105, 116, 99, 104,
+				8, 108, 100, 105, 110, 100, 46, 105, 49,
+				8, 108, 100, 105, 110, 100, 46, 117, 49,
+				8, 108, 100, 105, 110, 100, 46, 105, 50,
+				8, 108, 100, 105, 110, 100, 46, 117, 50,
+				8, 108, 100, 105, 110, 100, 46, 105, 52,
+				8, 108, 100, 105, 110, 100, 46, 117, 52,
+				8, 108, 100, 105, 110, 100, 46, 105, 56,
+				7, 108, 100, 105, 110, 100, 46, 105,
+				8, 108, 100, 105, 110, 100, 46, 114, 52,
+				8, 108, 100, 105, 110, 100, 46, 114, 56,
+				9, 108, 100, 105, 110, 100, 46, 114, 101, 102,
+				9, 115, 116, 105, 110, 100, 46, 114, 101, 102,
+				8, 115, 116, 105, 110, 100, 46, 105, 49,
+				8, 115, 116, 105, 110, 100, 46, 105, 50,
+				8, 115, 116, 105, 110, 100, 46, 105, 52,
+				8, 115, 116, 105, 110, 100, 46, 105, 56,
+				8, 115, 116, 105, 110, 100, 46, 114, 52,
+				8, 115, 116, 105, 110, 100, 46, 114, 56,
+				3, 97, 100, 100,
+				3, 115, 117, 98,
+				3, 109, 117, 108,
+				3, 100, 105, 118,
+				6, 100, 105, 118, 46, 117, 110,
+				3, 114, 101, 109,
+				6, 114, 101, 109, 46, 117, 110,
+				3, 97, 110, 100,
+				2, 111, 114,
+				3, 120, 111, 114,
+				3, 115, 104, 108,
+				3, 115, 104, 114,
+				6, 115, 104, 114, 46, 117, 110,
+				3, 110, 101, 103,
+				3, 110, 111, 116,
+				7, 99, 111, 110, 118, 46, 105, 49,
+				7, 99, 111, 110, 118, 46, 105, 50,
+				7, 99, 111, 110, 118, 46, 105, 52,
+				7, 99, 111, 110, 118, 46, 105, 56,
+				7, 99, 111, 110, 118, 46, 114, 52,
+				7, 99, 111, 110, 118, 46, 114, 56,
+				7, 99, 111, 110, 118, 46, 117, 52,
+				7, 99, 111, 110, 118, 46, 117, 56,
+				8, 99, 97, 108, 108, 118, 105, 114, 116,
+				5, 99, 112, 111, 98, 106,
+				5, 108, 100, 111, 98, 106,
+				5, 108, 100, 115, 116, 114,
+				6, 110, 101, 119, 111, 98, 106,
+				9, 99, 97, 115, 116, 99, 108, 97, 115, 115,
+				6, 105, 115, 105, 110, 115, 116,
+				9, 99, 111, 110, 118, 46, 114, 46, 117, 110,
+				5, 117, 110, 98, 111, 120,
+				5, 116, 104, 114, 111, 119,
+				5, 108, 100, 102, 108, 100,
+				6, 108, 100, 102, 108, 100, 97,
+				5, 115, 116, 102, 108, 100,
+				6, 108, 100, 115, 102, 108, 100,
+				7, 108, 100, 115, 102, 108, 100, 97,
+				6, 115, 116, 115, 102, 108, 100,
+				5, 115, 116, 111, 98, 106,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 49, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 50, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 52, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 56, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 49, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 50, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 52, 46, 117, 110,
+				14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 56, 46, 117, 110,
+				13, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 46, 117, 110,
+				13, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 46, 117, 110,
+				3, 98, 111, 120,
+				6, 110, 101, 119, 97, 114, 114,
+				5, 108, 100, 108, 101, 110,
+				7, 108, 100, 101, 108, 101, 109, 97,
+				9, 108, 100, 101, 108, 101, 109, 46, 105, 49,
+				9, 108, 100, 101, 108, 101, 109, 46, 117, 49,
+				9, 108, 100, 101, 108, 101, 109, 46, 105, 50,
+				9, 108, 100, 101, 108, 101, 109, 46, 117, 50,
+				9, 108, 100, 101, 108, 101, 109, 46, 105, 52,
+				9, 108, 100, 101, 108, 101, 109, 46, 117, 52,
+				9, 108, 100, 101, 108, 101, 109, 46, 105, 56,
+				8, 108, 100, 101, 108, 101, 109, 46, 105,
+				9, 108, 100, 101, 108, 101, 109, 46, 114, 52,
+				9, 108, 100, 101, 108, 101, 109, 46, 114, 56,
+				10, 108, 100, 101, 108, 101, 109, 46, 114, 101, 102,
+				8, 115, 116, 101, 108, 101, 109, 46, 105,
+				9, 115, 116, 101, 108, 101, 109, 46, 105, 49,
+				9, 115, 116, 101, 108, 101, 109, 46, 105, 50,
+				9, 115, 116, 101, 108, 101, 109, 46, 105, 52,
+				9, 115, 116, 101, 108, 101, 109, 46, 105, 56,
+				9, 115, 116, 101, 108, 101, 109, 46, 114, 52,
+				9, 115, 116, 101, 108, 101, 109, 46, 114, 56,
+				10, 115, 116, 101, 108, 101, 109, 46, 114, 101, 102,
+				10, 108, 100, 101, 108, 101, 109, 46, 97, 110, 121,
+				10, 115, 116, 101, 108, 101, 109, 46, 97, 110, 121,
+				9, 117, 110, 98, 111, 120, 46, 97, 110, 121,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 49,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 49,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 50,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 50,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 52,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 52,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 56,
+				11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 56,
+				9, 114, 101, 102, 97, 110, 121, 118, 97, 108,
+				8, 99, 107, 102, 105, 110, 105, 116, 101,
+				8, 109, 107, 114, 101, 102, 97, 110, 121,
+				7, 108, 100, 116, 111, 107, 101, 110,
+				7, 99, 111, 110, 118, 46, 117, 50,
+				7, 99, 111, 110, 118, 46, 117, 49,
+				6, 99, 111, 110, 118, 46, 105,
+				10, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105,
+				10, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117,
+				7, 97, 100, 100, 46, 111, 118, 102,
+				10, 97, 100, 100, 46, 111, 118, 102, 46, 117, 110,
+				7, 109, 117, 108, 46, 111, 118, 102,
+				10, 109, 117, 108, 46, 111, 118, 102, 46, 117, 110,
+				7, 115, 117, 98, 46, 111, 118, 102,
+				10, 115, 117, 98, 46, 111, 118, 102, 46, 117, 110,
+				10, 101, 110, 100, 102, 105, 110, 97, 108, 108, 121,
+				5, 108, 101, 97, 118, 101,
+				7, 108, 101, 97, 118, 101, 46, 115,
+				7, 115, 116, 105, 110, 100, 46, 105,
+				6, 99, 111, 110, 118, 46, 117,
+				7, 97, 114, 103, 108, 105, 115, 116,
+				3, 99, 101, 113,
+				3, 99, 103, 116,
+				6, 99, 103, 116, 46, 117, 110,
+				3, 99, 108, 116,
+				6, 99, 108, 116, 46, 117, 110,
+				5, 108, 100, 102, 116, 110,
+				9, 108, 100, 118, 105, 114, 116, 102, 116, 110,
+				5, 108, 100, 97, 114, 103,
+				6, 108, 100, 97, 114, 103, 97,
+				5, 115, 116, 97, 114, 103,
+				5, 108, 100, 108, 111, 99,
+				6, 108, 100, 108, 111, 99, 97,
+				5, 115, 116, 108, 111, 99,
+				8, 108, 111, 99, 97, 108, 108, 111, 99,
+				9, 101, 110, 100, 102, 105, 108, 116, 101, 114,
+				10, 117, 110, 97, 108, 105, 103, 110, 101, 100, 46,
+				9, 118, 111, 108, 97, 116, 105, 108, 101, 46,
+				5, 116, 97, 105, 108, 46,
+				7, 105, 110, 105, 116, 111, 98, 106,
+				12, 99, 111, 110, 115, 116, 114, 97, 105, 110, 101, 100, 46,
+				5, 99, 112, 98, 108, 107,
+				7, 105, 110, 105, 116, 98, 108, 107,
+				3, 110, 111, 46,
+				7, 114, 101, 116, 104, 114, 111, 119,
+				6, 115, 105, 122, 101, 111, 102,
+				10, 114, 101, 102, 97, 110, 121, 116, 121, 112, 101,
+				9, 114, 101, 97, 100, 111, 110, 108, 121, 46,
+			};
+
+			names = new string [219];
+
+			for (int i = 0, p = 0; i < names.Length; i++) {
+				var buffer = new char [table [p++]];
+
+				for (int j = 0; j < buffer.Length; j++)
+					buffer [j] = (char) table [p++];
+
+				names [i] = new string (buffer);
+			}
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCode.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 30c908ee1b8b102419225be8a2c7096f
+timeCreated: 1463825961
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 912 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCodes.cs

@@ -0,0 +1,912 @@
+//
+// OpCodes.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public static class OpCodes {
+
+		internal static readonly OpCode [] OneByteOpCode = new OpCode [0xe0 + 1];
+		internal static readonly OpCode [] TwoBytesOpCode = new OpCode [0x1e + 1];
+
+		public static readonly OpCode Nop = new OpCode (
+			0xff << 0 | 0x00 << 8 | (byte) Code.Nop << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Break = new OpCode (
+			0xff << 0 | 0x01 << 8 | (byte) Code.Break << 16 | (byte) FlowControl.Break << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldarg_0 = new OpCode (
+			0xff << 0 | 0x02 << 8 | (byte) Code.Ldarg_0 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldarg_1 = new OpCode (
+			0xff << 0 | 0x03 << 8 | (byte) Code.Ldarg_1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldarg_2 = new OpCode (
+			0xff << 0 | 0x04 << 8 | (byte) Code.Ldarg_2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldarg_3 = new OpCode (
+			0xff << 0 | 0x05 << 8 | (byte) Code.Ldarg_3 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloc_0 = new OpCode (
+			0xff << 0 | 0x06 << 8 | (byte) Code.Ldloc_0 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloc_1 = new OpCode (
+			0xff << 0 | 0x07 << 8 | (byte) Code.Ldloc_1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloc_2 = new OpCode (
+			0xff << 0 | 0x08 << 8 | (byte) Code.Ldloc_2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloc_3 = new OpCode (
+			0xff << 0 | 0x09 << 8 | (byte) Code.Ldloc_3 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Stloc_0 = new OpCode (
+			0xff << 0 | 0x0a << 8 | (byte) Code.Stloc_0 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stloc_1 = new OpCode (
+			0xff << 0 | 0x0b << 8 | (byte) Code.Stloc_1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stloc_2 = new OpCode (
+			0xff << 0 | 0x0c << 8 | (byte) Code.Stloc_2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stloc_3 = new OpCode (
+			0xff << 0 | 0x0d << 8 | (byte) Code.Stloc_3 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldarg_S = new OpCode (
+			0xff << 0 | 0x0e << 8 | (byte) Code.Ldarg_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldarga_S = new OpCode (
+			0xff << 0 | 0x0f << 8 | (byte) Code.Ldarga_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Starg_S = new OpCode (
+			0xff << 0 | 0x10 << 8 | (byte) Code.Starg_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldloc_S = new OpCode (
+			0xff << 0 | 0x11 << 8 | (byte) Code.Ldloc_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloca_S = new OpCode (
+			0xff << 0 | 0x12 << 8 | (byte) Code.Ldloca_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Stloc_S = new OpCode (
+			0xff << 0 | 0x13 << 8 | (byte) Code.Stloc_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldnull = new OpCode (
+			0xff << 0 | 0x14 << 8 | (byte) Code.Ldnull << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Ldc_I4_M1 = new OpCode (
+			0xff << 0 | 0x15 << 8 | (byte) Code.Ldc_I4_M1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_0 = new OpCode (
+			0xff << 0 | 0x16 << 8 | (byte) Code.Ldc_I4_0 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_1 = new OpCode (
+			0xff << 0 | 0x17 << 8 | (byte) Code.Ldc_I4_1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_2 = new OpCode (
+			0xff << 0 | 0x18 << 8 | (byte) Code.Ldc_I4_2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_3 = new OpCode (
+			0xff << 0 | 0x19 << 8 | (byte) Code.Ldc_I4_3 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_4 = new OpCode (
+			0xff << 0 | 0x1a << 8 | (byte) Code.Ldc_I4_4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_5 = new OpCode (
+			0xff << 0 | 0x1b << 8 | (byte) Code.Ldc_I4_5 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_6 = new OpCode (
+			0xff << 0 | 0x1c << 8 | (byte) Code.Ldc_I4_6 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_7 = new OpCode (
+			0xff << 0 | 0x1d << 8 | (byte) Code.Ldc_I4_7 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_8 = new OpCode (
+			0xff << 0 | 0x1e << 8 | (byte) Code.Ldc_I4_8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4_S = new OpCode (
+			0xff << 0 | 0x1f << 8 | (byte) Code.Ldc_I4_S << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I4 = new OpCode (
+			0xff << 0 | 0x20 << 8 | (byte) Code.Ldc_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldc_I8 = new OpCode (
+			0xff << 0 | 0x21 << 8 | (byte) Code.Ldc_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineI8 << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Ldc_R4 = new OpCode (
+			0xff << 0 | 0x22 << 8 | (byte) Code.Ldc_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.ShortInlineR << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushr4 << 24);
+
+		public static readonly OpCode Ldc_R8 = new OpCode (
+			0xff << 0 | 0x23 << 8 | (byte) Code.Ldc_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineR << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Dup = new OpCode (
+			0xff << 0 | 0x25 << 8 | (byte) Code.Dup << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1_push1 << 24);
+
+		public static readonly OpCode Pop = new OpCode (
+			0xff << 0 | 0x26 << 8 | (byte) Code.Pop << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Jmp = new OpCode (
+			0xff << 0 | 0x27 << 8 | (byte) Code.Jmp << 16 | (byte) FlowControl.Call << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Call = new OpCode (
+			0xff << 0 | 0x28 << 8 | (byte) Code.Call << 16 | (byte) FlowControl.Call << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24);
+
+		public static readonly OpCode Calli = new OpCode (
+			0xff << 0 | 0x29 << 8 | (byte) Code.Calli << 16 | (byte) FlowControl.Call << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineSig << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24);
+
+		public static readonly OpCode Ret = new OpCode (
+			0xff << 0 | 0x2a << 8 | (byte) Code.Ret << 16 | (byte) FlowControl.Return << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Br_S = new OpCode (
+			0xff << 0 | 0x2b << 8 | (byte) Code.Br_S << 16 | (byte) FlowControl.Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Brfalse_S = new OpCode (
+			0xff << 0 | 0x2c << 8 | (byte) Code.Brfalse_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Brtrue_S = new OpCode (
+			0xff << 0 | 0x2d << 8 | (byte) Code.Brtrue_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Beq_S = new OpCode (
+			0xff << 0 | 0x2e << 8 | (byte) Code.Beq_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bge_S = new OpCode (
+			0xff << 0 | 0x2f << 8 | (byte) Code.Bge_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bgt_S = new OpCode (
+			0xff << 0 | 0x30 << 8 | (byte) Code.Bgt_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ble_S = new OpCode (
+			0xff << 0 | 0x31 << 8 | (byte) Code.Ble_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Blt_S = new OpCode (
+			0xff << 0 | 0x32 << 8 | (byte) Code.Blt_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bne_Un_S = new OpCode (
+			0xff << 0 | 0x33 << 8 | (byte) Code.Bne_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bge_Un_S = new OpCode (
+			0xff << 0 | 0x34 << 8 | (byte) Code.Bge_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bgt_Un_S = new OpCode (
+			0xff << 0 | 0x35 << 8 | (byte) Code.Bgt_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ble_Un_S = new OpCode (
+			0xff << 0 | 0x36 << 8 | (byte) Code.Ble_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Blt_Un_S = new OpCode (
+			0xff << 0 | 0x37 << 8 | (byte) Code.Blt_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Br = new OpCode (
+			0xff << 0 | 0x38 << 8 | (byte) Code.Br << 16 | (byte) FlowControl.Branch << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Brfalse = new OpCode (
+			0xff << 0 | 0x39 << 8 | (byte) Code.Brfalse << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Brtrue = new OpCode (
+			0xff << 0 | 0x3a << 8 | (byte) Code.Brtrue << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Beq = new OpCode (
+			0xff << 0 | 0x3b << 8 | (byte) Code.Beq << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bge = new OpCode (
+			0xff << 0 | 0x3c << 8 | (byte) Code.Bge << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bgt = new OpCode (
+			0xff << 0 | 0x3d << 8 | (byte) Code.Bgt << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ble = new OpCode (
+			0xff << 0 | 0x3e << 8 | (byte) Code.Ble << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Blt = new OpCode (
+			0xff << 0 | 0x3f << 8 | (byte) Code.Blt << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bne_Un = new OpCode (
+			0xff << 0 | 0x40 << 8 | (byte) Code.Bne_Un << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bge_Un = new OpCode (
+			0xff << 0 | 0x41 << 8 | (byte) Code.Bge_Un << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Bgt_Un = new OpCode (
+			0xff << 0 | 0x42 << 8 | (byte) Code.Bgt_Un << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ble_Un = new OpCode (
+			0xff << 0 | 0x43 << 8 | (byte) Code.Ble_Un << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Blt_Un = new OpCode (
+			0xff << 0 | 0x44 << 8 | (byte) Code.Blt_Un << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Switch = new OpCode (
+			0xff << 0 | 0x45 << 8 | (byte) Code.Switch << 16 | (byte) FlowControl.Cond_Branch << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineSwitch << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldind_I1 = new OpCode (
+			0xff << 0 | 0x46 << 8 | (byte) Code.Ldind_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_U1 = new OpCode (
+			0xff << 0 | 0x47 << 8 | (byte) Code.Ldind_U1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_I2 = new OpCode (
+			0xff << 0 | 0x48 << 8 | (byte) Code.Ldind_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_U2 = new OpCode (
+			0xff << 0 | 0x49 << 8 | (byte) Code.Ldind_U2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_I4 = new OpCode (
+			0xff << 0 | 0x4a << 8 | (byte) Code.Ldind_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_U4 = new OpCode (
+			0xff << 0 | 0x4b << 8 | (byte) Code.Ldind_U4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_I8 = new OpCode (
+			0xff << 0 | 0x4c << 8 | (byte) Code.Ldind_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Ldind_I = new OpCode (
+			0xff << 0 | 0x4d << 8 | (byte) Code.Ldind_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldind_R4 = new OpCode (
+			0xff << 0 | 0x4e << 8 | (byte) Code.Ldind_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushr4 << 24);
+
+		public static readonly OpCode Ldind_R8 = new OpCode (
+			0xff << 0 | 0x4f << 8 | (byte) Code.Ldind_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Ldind_Ref = new OpCode (
+			0xff << 0 | 0x50 << 8 | (byte) Code.Ldind_Ref << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Stind_Ref = new OpCode (
+			0xff << 0 | 0x51 << 8 | (byte) Code.Stind_Ref << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_I1 = new OpCode (
+			0xff << 0 | 0x52 << 8 | (byte) Code.Stind_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_I2 = new OpCode (
+			0xff << 0 | 0x53 << 8 | (byte) Code.Stind_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_I4 = new OpCode (
+			0xff << 0 | 0x54 << 8 | (byte) Code.Stind_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_I8 = new OpCode (
+			0xff << 0 | 0x55 << 8 | (byte) Code.Stind_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi8 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_R4 = new OpCode (
+			0xff << 0 | 0x56 << 8 | (byte) Code.Stind_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popr4 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_R8 = new OpCode (
+			0xff << 0 | 0x57 << 8 | (byte) Code.Stind_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popr8 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Add = new OpCode (
+			0xff << 0 | 0x58 << 8 | (byte) Code.Add << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Sub = new OpCode (
+			0xff << 0 | 0x59 << 8 | (byte) Code.Sub << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Mul = new OpCode (
+			0xff << 0 | 0x5a << 8 | (byte) Code.Mul << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Div = new OpCode (
+			0xff << 0 | 0x5b << 8 | (byte) Code.Div << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Div_Un = new OpCode (
+			0xff << 0 | 0x5c << 8 | (byte) Code.Div_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Rem = new OpCode (
+			0xff << 0 | 0x5d << 8 | (byte) Code.Rem << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Rem_Un = new OpCode (
+			0xff << 0 | 0x5e << 8 | (byte) Code.Rem_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode And = new OpCode (
+			0xff << 0 | 0x5f << 8 | (byte) Code.And << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Or = new OpCode (
+			0xff << 0 | 0x60 << 8 | (byte) Code.Or << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Xor = new OpCode (
+			0xff << 0 | 0x61 << 8 | (byte) Code.Xor << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Shl = new OpCode (
+			0xff << 0 | 0x62 << 8 | (byte) Code.Shl << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Shr = new OpCode (
+			0xff << 0 | 0x63 << 8 | (byte) Code.Shr << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Shr_Un = new OpCode (
+			0xff << 0 | 0x64 << 8 | (byte) Code.Shr_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Neg = new OpCode (
+			0xff << 0 | 0x65 << 8 | (byte) Code.Neg << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Not = new OpCode (
+			0xff << 0 | 0x66 << 8 | (byte) Code.Not << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Conv_I1 = new OpCode (
+			0xff << 0 | 0x67 << 8 | (byte) Code.Conv_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_I2 = new OpCode (
+			0xff << 0 | 0x68 << 8 | (byte) Code.Conv_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_I4 = new OpCode (
+			0xff << 0 | 0x69 << 8 | (byte) Code.Conv_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_I8 = new OpCode (
+			0xff << 0 | 0x6a << 8 | (byte) Code.Conv_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Conv_R4 = new OpCode (
+			0xff << 0 | 0x6b << 8 | (byte) Code.Conv_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr4 << 24);
+
+		public static readonly OpCode Conv_R8 = new OpCode (
+			0xff << 0 | 0x6c << 8 | (byte) Code.Conv_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Conv_U4 = new OpCode (
+			0xff << 0 | 0x6d << 8 | (byte) Code.Conv_U4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_U8 = new OpCode (
+			0xff << 0 | 0x6e << 8 | (byte) Code.Conv_U8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Callvirt = new OpCode (
+			0xff << 0 | 0x6f << 8 | (byte) Code.Callvirt << 16 | (byte) FlowControl.Call << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24);
+
+		public static readonly OpCode Cpobj = new OpCode (
+			0xff << 0 | 0x70 << 8 | (byte) Code.Cpobj << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldobj = new OpCode (
+			0xff << 0 | 0x71 << 8 | (byte) Code.Ldobj << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldstr = new OpCode (
+			0xff << 0 | 0x72 << 8 | (byte) Code.Ldstr << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineString << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Newobj = new OpCode (
+			0xff << 0 | 0x73 << 8 | (byte) Code.Newobj << 16 | (byte) FlowControl.Call << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Castclass = new OpCode (
+			0xff << 0 | 0x74 << 8 | (byte) Code.Castclass << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Isinst = new OpCode (
+			0xff << 0 | 0x75 << 8 | (byte) Code.Isinst << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_R_Un = new OpCode (
+			0xff << 0 | 0x76 << 8 | (byte) Code.Conv_R_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Unbox = new OpCode (
+			0xff << 0 | 0x79 << 8 | (byte) Code.Unbox << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Throw = new OpCode (
+			0xff << 0 | 0x7a << 8 | (byte) Code.Throw << 16 | (byte) FlowControl.Throw << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldfld = new OpCode (
+			0xff << 0 | 0x7b << 8 | (byte) Code.Ldfld << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldflda = new OpCode (
+			0xff << 0 | 0x7c << 8 | (byte) Code.Ldflda << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Stfld = new OpCode (
+			0xff << 0 | 0x7d << 8 | (byte) Code.Stfld << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldsfld = new OpCode (
+			0xff << 0 | 0x7e << 8 | (byte) Code.Ldsfld << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldsflda = new OpCode (
+			0xff << 0 | 0x7f << 8 | (byte) Code.Ldsflda << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Stsfld = new OpCode (
+			0xff << 0 | 0x80 << 8 | (byte) Code.Stsfld << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stobj = new OpCode (
+			0xff << 0 | 0x81 << 8 | (byte) Code.Stobj << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi_pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Conv_Ovf_I1_Un = new OpCode (
+			0xff << 0 | 0x82 << 8 | (byte) Code.Conv_Ovf_I1_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I2_Un = new OpCode (
+			0xff << 0 | 0x83 << 8 | (byte) Code.Conv_Ovf_I2_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I4_Un = new OpCode (
+			0xff << 0 | 0x84 << 8 | (byte) Code.Conv_Ovf_I4_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I8_Un = new OpCode (
+			0xff << 0 | 0x85 << 8 | (byte) Code.Conv_Ovf_I8_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Conv_Ovf_U1_Un = new OpCode (
+			0xff << 0 | 0x86 << 8 | (byte) Code.Conv_Ovf_U1_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U2_Un = new OpCode (
+			0xff << 0 | 0x87 << 8 | (byte) Code.Conv_Ovf_U2_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U4_Un = new OpCode (
+			0xff << 0 | 0x88 << 8 | (byte) Code.Conv_Ovf_U4_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U8_Un = new OpCode (
+			0xff << 0 | 0x89 << 8 | (byte) Code.Conv_Ovf_U8_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Conv_Ovf_I_Un = new OpCode (
+			0xff << 0 | 0x8a << 8 | (byte) Code.Conv_Ovf_I_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U_Un = new OpCode (
+			0xff << 0 | 0x8b << 8 | (byte) Code.Conv_Ovf_U_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Box = new OpCode (
+			0xff << 0 | 0x8c << 8 | (byte) Code.Box << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Newarr = new OpCode (
+			0xff << 0 | 0x8d << 8 | (byte) Code.Newarr << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Ldlen = new OpCode (
+			0xff << 0 | 0x8e << 8 | (byte) Code.Ldlen << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelema = new OpCode (
+			0xff << 0 | 0x8f << 8 | (byte) Code.Ldelema << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_I1 = new OpCode (
+			0xff << 0 | 0x90 << 8 | (byte) Code.Ldelem_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_U1 = new OpCode (
+			0xff << 0 | 0x91 << 8 | (byte) Code.Ldelem_U1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_I2 = new OpCode (
+			0xff << 0 | 0x92 << 8 | (byte) Code.Ldelem_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_U2 = new OpCode (
+			0xff << 0 | 0x93 << 8 | (byte) Code.Ldelem_U2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_I4 = new OpCode (
+			0xff << 0 | 0x94 << 8 | (byte) Code.Ldelem_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_U4 = new OpCode (
+			0xff << 0 | 0x95 << 8 | (byte) Code.Ldelem_U4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_I8 = new OpCode (
+			0xff << 0 | 0x96 << 8 | (byte) Code.Ldelem_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Ldelem_I = new OpCode (
+			0xff << 0 | 0x97 << 8 | (byte) Code.Ldelem_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldelem_R4 = new OpCode (
+			0xff << 0 | 0x98 << 8 | (byte) Code.Ldelem_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushr4 << 24);
+
+		public static readonly OpCode Ldelem_R8 = new OpCode (
+			0xff << 0 | 0x99 << 8 | (byte) Code.Ldelem_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Ldelem_Ref = new OpCode (
+			0xff << 0 | 0x9a << 8 | (byte) Code.Ldelem_Ref << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushref << 24);
+
+		public static readonly OpCode Stelem_I = new OpCode (
+			0xff << 0 | 0x9b << 8 | (byte) Code.Stelem_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_I1 = new OpCode (
+			0xff << 0 | 0x9c << 8 | (byte) Code.Stelem_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_I2 = new OpCode (
+			0xff << 0 | 0x9d << 8 | (byte) Code.Stelem_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_I4 = new OpCode (
+			0xff << 0 | 0x9e << 8 | (byte) Code.Stelem_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_I8 = new OpCode (
+			0xff << 0 | 0x9f << 8 | (byte) Code.Stelem_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi8 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_R4 = new OpCode (
+			0xff << 0 | 0xa0 << 8 | (byte) Code.Stelem_R4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popr4 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_R8 = new OpCode (
+			0xff << 0 | 0xa1 << 8 | (byte) Code.Stelem_R8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popr8 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stelem_Ref = new OpCode (
+			0xff << 0 | 0xa2 << 8 | (byte) Code.Stelem_Ref << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popref << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldelem_Any = new OpCode (
+			0xff << 0 | 0xa3 << 8 | (byte) Code.Ldelem_Any << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Stelem_Any = new OpCode (
+			0xff << 0 | 0xa4 << 8 | (byte) Code.Stelem_Any << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi_popref << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Unbox_Any = new OpCode (
+			0xff << 0 | 0xa5 << 8 | (byte) Code.Unbox_Any << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Conv_Ovf_I1 = new OpCode (
+			0xff << 0 | 0xb3 << 8 | (byte) Code.Conv_Ovf_I1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U1 = new OpCode (
+			0xff << 0 | 0xb4 << 8 | (byte) Code.Conv_Ovf_U1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I2 = new OpCode (
+			0xff << 0 | 0xb5 << 8 | (byte) Code.Conv_Ovf_I2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U2 = new OpCode (
+			0xff << 0 | 0xb6 << 8 | (byte) Code.Conv_Ovf_U2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I4 = new OpCode (
+			0xff << 0 | 0xb7 << 8 | (byte) Code.Conv_Ovf_I4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U4 = new OpCode (
+			0xff << 0 | 0xb8 << 8 | (byte) Code.Conv_Ovf_U4 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I8 = new OpCode (
+			0xff << 0 | 0xb9 << 8 | (byte) Code.Conv_Ovf_I8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Conv_Ovf_U8 = new OpCode (
+			0xff << 0 | 0xba << 8 | (byte) Code.Conv_Ovf_U8 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24);
+
+		public static readonly OpCode Refanyval = new OpCode (
+			0xff << 0 | 0xc2 << 8 | (byte) Code.Refanyval << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ckfinite = new OpCode (
+			0xff << 0 | 0xc3 << 8 | (byte) Code.Ckfinite << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24);
+
+		public static readonly OpCode Mkrefany = new OpCode (
+			0xff << 0 | 0xc6 << 8 | (byte) Code.Mkrefany << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldtoken = new OpCode (
+			0xff << 0 | 0xd0 << 8 | (byte) Code.Ldtoken << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineTok << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_U2 = new OpCode (
+			0xff << 0 | 0xd1 << 8 | (byte) Code.Conv_U2 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_U1 = new OpCode (
+			0xff << 0 | 0xd2 << 8 | (byte) Code.Conv_U1 << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_I = new OpCode (
+			0xff << 0 | 0xd3 << 8 | (byte) Code.Conv_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_I = new OpCode (
+			0xff << 0 | 0xd4 << 8 | (byte) Code.Conv_Ovf_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Conv_Ovf_U = new OpCode (
+			0xff << 0 | 0xd5 << 8 | (byte) Code.Conv_Ovf_U << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Add_Ovf = new OpCode (
+			0xff << 0 | 0xd6 << 8 | (byte) Code.Add_Ovf << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Add_Ovf_Un = new OpCode (
+			0xff << 0 | 0xd7 << 8 | (byte) Code.Add_Ovf_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Mul_Ovf = new OpCode (
+			0xff << 0 | 0xd8 << 8 | (byte) Code.Mul_Ovf << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Mul_Ovf_Un = new OpCode (
+			0xff << 0 | 0xd9 << 8 | (byte) Code.Mul_Ovf_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Sub_Ovf = new OpCode (
+			0xff << 0 | 0xda << 8 | (byte) Code.Sub_Ovf << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Sub_Ovf_Un = new OpCode (
+			0xff << 0 | 0xdb << 8 | (byte) Code.Sub_Ovf_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Endfinally = new OpCode (
+			0xff << 0 | 0xdc << 8 | (byte) Code.Endfinally << 16 | (byte) FlowControl.Return << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Leave = new OpCode (
+			0xff << 0 | 0xdd << 8 | (byte) Code.Leave << 16 | (byte) FlowControl.Branch << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.PopAll << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Leave_S = new OpCode (
+			0xff << 0 | 0xde << 8 | (byte) Code.Leave_S << 16 | (byte) FlowControl.Branch << 24,
+			(byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.PopAll << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Stind_I = new OpCode (
+			0xff << 0 | 0xdf << 8 | (byte) Code.Stind_I << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Conv_U = new OpCode (
+			0xff << 0 | 0xe0 << 8 | (byte) Code.Conv_U << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Arglist = new OpCode (
+			0xfe << 0 | 0x00 << 8 | (byte) Code.Arglist << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ceq = new OpCode (
+			0xfe << 0 | 0x01 << 8 | (byte) Code.Ceq << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Cgt = new OpCode (
+			0xfe << 0 | 0x02 << 8 | (byte) Code.Cgt << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Cgt_Un = new OpCode (
+			0xfe << 0 | 0x03 << 8 | (byte) Code.Cgt_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Clt = new OpCode (
+			0xfe << 0 | 0x04 << 8 | (byte) Code.Clt << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Clt_Un = new OpCode (
+			0xfe << 0 | 0x05 << 8 | (byte) Code.Clt_Un << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldftn = new OpCode (
+			0xfe << 0 | 0x06 << 8 | (byte) Code.Ldftn << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldvirtftn = new OpCode (
+			0xfe << 0 | 0x07 << 8 | (byte) Code.Ldvirtftn << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Ldarg = new OpCode (
+			0xfe << 0 | 0x09 << 8 | (byte) Code.Ldarg << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldarga = new OpCode (
+			0xfe << 0 | 0x0a << 8 | (byte) Code.Ldarga << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Starg = new OpCode (
+			0xfe << 0 | 0x0b << 8 | (byte) Code.Starg << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Ldloc = new OpCode (
+			0xfe << 0 | 0x0c << 8 | (byte) Code.Ldloc << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24);
+
+		public static readonly OpCode Ldloca = new OpCode (
+			0xfe << 0 | 0x0d << 8 | (byte) Code.Ldloca << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Stloc = new OpCode (
+			0xfe << 0 | 0x0e << 8 | (byte) Code.Stloc << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Localloc = new OpCode (
+			0xfe << 0 | 0x0f << 8 | (byte) Code.Localloc << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Endfilter = new OpCode (
+			0xfe << 0 | 0x11 << 8 | (byte) Code.Endfilter << 16 | (byte) FlowControl.Return << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Unaligned = new OpCode (
+			0xfe << 0 | 0x12 << 8 | (byte) Code.Unaligned << 16 | (byte) FlowControl.Meta << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Volatile = new OpCode (
+			0xfe << 0 | 0x13 << 8 | (byte) Code.Volatile << 16 | (byte) FlowControl.Meta << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Tail = new OpCode (
+			0xfe << 0 | 0x14 << 8 | (byte) Code.Tail << 16 | (byte) FlowControl.Meta << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Initobj = new OpCode (
+			0xfe << 0 | 0x15 << 8 | (byte) Code.Initobj << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Constrained = new OpCode (
+			0xfe << 0 | 0x16 << 8 | (byte) Code.Constrained << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Cpblk = new OpCode (
+			0xfe << 0 | 0x17 << 8 | (byte) Code.Cpblk << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Initblk = new OpCode (
+			0xfe << 0 | 0x18 << 8 | (byte) Code.Initblk << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode No = new OpCode (
+			0xfe << 0 | 0x19 << 8 | (byte) Code.No << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Rethrow = new OpCode (
+			0xfe << 0 | 0x1a << 8 | (byte) Code.Rethrow << 16 | (byte) FlowControl.Throw << 24,
+			(byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+
+		public static readonly OpCode Sizeof = new OpCode (
+			0xfe << 0 | 0x1c << 8 | (byte) Code.Sizeof << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Refanytype = new OpCode (
+			0xfe << 0 | 0x1d << 8 | (byte) Code.Refanytype << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24);
+
+		public static readonly OpCode Readonly = new OpCode (
+			0xfe << 0 | 0x1e << 8 | (byte) Code.Readonly << 16 | (byte) FlowControl.Next << 24,
+			(byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24);
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/OpCodes.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 746d49a0f84b9cf4091c8766943f5b0f
+timeCreated: 1463825962
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 70 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/SequencePoint.cs

@@ -0,0 +1,70 @@
+//
+// SequencePoint.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public sealed class SequencePoint {
+
+		Document document;
+
+		int start_line;
+		int start_column;
+		int end_line;
+		int end_column;
+
+		public int StartLine {
+			get { return start_line; }
+			set { start_line = value; }
+		}
+
+		public int StartColumn {
+			get { return start_column; }
+			set { start_column = value; }
+		}
+
+		public int EndLine {
+			get { return end_line; }
+			set { end_line = value; }
+		}
+
+		public int EndColumn {
+			get { return end_column; }
+			set { end_column = value; }
+		}
+
+		public Document Document {
+			get { return document; }
+			set { document = value; }
+		}
+
+		public SequencePoint (Document document)
+		{
+			this.document = document;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/SequencePoint.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6f82c88233469d340820debfa8db887b
+timeCreated: 1463825962
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 243 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Symbols.cs

@@ -0,0 +1,243 @@
+//
+// Symbols.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using SR = System.Reflection;
+
+using Mono.Collections.Generic;
+
+namespace Mono.Cecil.Cil {
+
+	[StructLayout (LayoutKind.Sequential)]
+	public struct ImageDebugDirectory {
+		public int Characteristics;
+		public int TimeDateStamp;
+		public short MajorVersion;
+		public short MinorVersion;
+		public int Type;
+		public int SizeOfData;
+		public int AddressOfRawData;
+		public int PointerToRawData;
+	}
+
+	public sealed class Scope : IVariableDefinitionProvider {
+
+		Instruction start;
+		Instruction end;
+
+		Collection<Scope> scopes;
+		Collection<VariableDefinition> variables;
+
+		public Instruction Start {
+			get { return start; }
+			set { start = value; }
+		}
+
+		public Instruction End {
+			get { return end; }
+			set { end = value; }
+		}
+
+		public bool HasScopes {
+			get { return !Mixin.IsNullOrEmpty (scopes); }
+		}
+
+		public Collection<Scope> Scopes {
+			get {
+				if (scopes == null)
+					scopes = new Collection<Scope> ();
+
+				return scopes;
+			}
+		}
+
+		public bool HasVariables {
+			get { return !Mixin.IsNullOrEmpty (variables); }
+		}
+
+		public Collection<VariableDefinition> Variables {
+			get {
+				if (variables == null)
+					variables = new Collection<VariableDefinition> ();
+
+				return variables;
+			}
+		}
+	}
+
+	public struct InstructionSymbol {
+
+		public readonly int Offset;
+		public readonly SequencePoint SequencePoint;
+
+		public InstructionSymbol (int offset, SequencePoint sequencePoint)
+		{
+			this.Offset = offset;
+			this.SequencePoint = sequencePoint;
+		}
+	}
+
+	public sealed class MethodSymbols {
+
+		internal int code_size;
+		internal string method_name;
+		internal MetadataToken method_token;
+		internal MetadataToken local_var_token;
+		internal Collection<VariableDefinition> variables;
+		public Collection<InstructionSymbol> instructions;
+
+		public bool HasVariables {
+			get { return !Mixin.IsNullOrEmpty (variables); }
+		}
+
+		public Collection<VariableDefinition> Variables {
+			get {
+				if (variables == null)
+					variables = new Collection<VariableDefinition> ();
+
+				return variables;
+			}
+		}
+
+		public Collection<InstructionSymbol> Instructions {
+			get {
+				if (instructions == null)
+					instructions = new Collection<InstructionSymbol> ();
+
+				return instructions;
+			}
+		}
+
+		public int CodeSize {
+			get { return code_size; }
+		}
+
+		public string MethodName {
+			get { return method_name; }
+		}
+
+		public MetadataToken MethodToken {
+			get { return method_token; }
+		}
+
+		public MetadataToken LocalVarToken {
+			get { return local_var_token; }
+		}
+
+		internal MethodSymbols (string methodName)
+		{
+			this.method_name = methodName;
+		}
+
+		public MethodSymbols (MetadataToken methodToken)
+		{
+			this.method_token = methodToken;
+		}
+	}
+
+	public delegate Instruction InstructionMapper (int offset);
+
+	public interface ISymbolReader : IDisposable {
+
+		bool ProcessDebugHeader (ImageDebugDirectory directory, byte [] header);
+		void Read (MethodBody body, InstructionMapper mapper);
+		void Read (MethodSymbols symbols);
+	}
+
+	public interface ISymbolReaderProvider {
+
+		ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName);
+		ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream);
+	}
+
+	static class SymbolProvider {
+
+		static readonly string symbol_kind = Type.GetType ("Mono.Runtime") != null ? "Mdb" : "Pdb";
+
+		static SR.AssemblyName GetPlatformSymbolAssemblyName ()
+		{
+			var cecil_name = typeof (SymbolProvider).Assembly.GetName ();
+
+			var name = new SR.AssemblyName {
+				Name = "Mono.Cecil." + symbol_kind,
+				Version = cecil_name.Version,
+			};
+
+			name.SetPublicKeyToken (cecil_name.GetPublicKeyToken ());
+
+			return name;
+		}
+
+		static Type GetPlatformType (string fullname)
+		{
+			var type = Type.GetType (fullname);
+			if (type != null)
+				return type;
+
+			var assembly_name = GetPlatformSymbolAssemblyName ();
+
+			type = Type.GetType (fullname + ", " + assembly_name.FullName);
+			if (type != null)
+				return type;
+
+			try {
+				var assembly = SR.Assembly.Load (assembly_name);
+				if (assembly != null)
+					return assembly.GetType (fullname);
+			} catch (FileNotFoundException) {
+
+			}
+
+			return null;
+		}
+
+		static ISymbolReaderProvider reader_provider;
+
+		public static ISymbolReaderProvider GetPlatformReaderProvider ()
+		{
+			if (reader_provider != null)
+				return reader_provider;
+
+			var type = GetPlatformType (GetProviderTypeName ("ReaderProvider"));
+			if (type == null)
+				return null;
+
+			return reader_provider = (ISymbolReaderProvider) Activator.CreateInstance (type);
+		}
+
+		static string GetProviderTypeName (string name)
+		{
+			return "Mono.Cecil." + symbol_kind + "." + symbol_kind + name;
+		}
+
+
+	}
+
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/Symbols.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: be715cd6bfdcc6545ad4b0a1b44fce78
+timeCreated: 1463825964
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 52 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableDefinition.cs

@@ -0,0 +1,52 @@
+//
+// VariableDefinition.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public sealed class VariableDefinition : VariableReference {
+
+		public bool IsPinned {
+			get { return variable_type.IsPinned; }
+		}
+
+		public VariableDefinition (TypeReference variableType)
+			: base (variableType)
+		{
+		}
+
+		public VariableDefinition (string name, TypeReference variableType)
+			: base (name, variableType)
+		{
+		}
+
+		public override VariableDefinition Resolve ()
+		{
+			return this;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableDefinition.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8e8da0f88d639b047a3883553ccf203d
+timeCreated: 1463825963
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 75 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableReference.cs

@@ -0,0 +1,75 @@
+//
+// VariableReference.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Cil {
+
+	public abstract class VariableReference {
+
+		string name;
+		internal int index = -1;
+		protected TypeReference variable_type;
+
+		public string Name {
+			get { return name; }
+			set { name = value; }
+		}
+
+		public TypeReference VariableType {
+			get { return variable_type; }
+			set { variable_type = value; }
+		}
+
+		public int Index {
+			get { return index; }
+		}
+
+		internal VariableReference (TypeReference variable_type)
+			: this (string.Empty, variable_type)
+		{
+		}
+
+		internal VariableReference (string name, TypeReference variable_type)
+		{
+			this.name = name;
+			this.variable_type = variable_type;
+		}
+
+		public abstract VariableDefinition Resolve ();
+
+		public override string ToString ()
+		{
+			if (!string.IsNullOrEmpty (name))
+				return name;
+
+			if (index >= 0)
+				return "V_" + index;
+
+			return string.Empty;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Cil/VariableReference.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b7b6b87cb2fe9e04a8e80463125c832d
+timeCreated: 1463825964
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a45c83871a817e24580d627b700d4b36
+folderAsset: yes
+timeCreated: 1463825952
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 61 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/BlobHeap.cs

@@ -0,0 +1,61 @@
+//
+// BlobHeap.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Cecil.PE;
+
+namespace Mono.Cecil.Metadata
+{
+
+    sealed class BlobHeap : Heap
+    {
+
+        public BlobHeap(Section section, uint start, uint size)
+            : base(section, start, size)
+        {
+        }
+
+        public byte[] Read(uint index)
+        {
+            if (index == 0 || index > Size - 1)
+                return Empty<byte>.Array;
+
+            var data = Section.Data;
+
+            int position = (int)(index + Offset);
+            int length = (int)Mixin.ReadCompressedUInt32(data, ref position);
+
+            var buffer = new byte[length];
+
+            Buffer.BlockCopy(data, position, buffer, 0, length);
+
+            return buffer;
+        }
+    }
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/BlobHeap.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3c71ed264c033fd43baea106e341002b
+timeCreated: 1463825961
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 36 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/Buffers.cs

@@ -0,0 +1,36 @@
+//
+// TableHeapBuffer.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Mono.Cecil.PE;
+
+using RVA = System.UInt32;
+

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/Buffers.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9fca80b9b94068a4ea7f6d4a1b52820e
+timeCreated: 1463825963
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 46 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/CodedIndex.cs

@@ -0,0 +1,46 @@
+//
+// CodedIndex.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Metadata {
+
+	enum CodedIndex {
+		TypeDefOrRef,
+		HasConstant,
+		HasCustomAttribute,
+		HasFieldMarshal,
+		HasDeclSecurity,
+		MemberRefParent,
+		HasSemantics,
+		MethodDefOrRef,
+		MemberForwarded,
+		Implementation,
+		CustomAttributeType,
+		ResolutionScope,
+		TypeOrMethodDef
+	}
+}

+ 12 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/CodedIndex.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 928d7c618fc7b694287b38241b9378f5
+timeCreated: 1463825963
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 73 - 0
Unity/Assets/Plugins/Mono.Cecil.20/MonoCecil/Mono.Cecil.Metadata/ElementType.cs

@@ -0,0 +1,73 @@
+//
+// ElementType.cs
+//
+// Author:
+//   Jb Evain (jbevain@gmail.com)
+//
+// Copyright (c) 2008 - 2011 Jb Evain
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Mono.Cecil.Metadata {
+
+	enum ElementType : byte {
+		None = 0x00,
+		Void = 0x01,
+		Boolean = 0x02,
+		Char = 0x03,
+		I1 = 0x04,
+		U1 = 0x05,
+		I2 = 0x06,
+		U2 = 0x07,
+		I4 = 0x08,
+		U4 = 0x09,
+		I8 = 0x0a,
+		U8 = 0x0b,
+		R4 = 0x0c,
+		R8 = 0x0d,
+		String = 0x0e,
+		Ptr = 0x0f,   // Followed by <type> token
+		ByRef = 0x10,   // Followed by <type> token
+		ValueType = 0x11,   // Followed by <type> token
+		Class = 0x12,   // Followed by <type> token
+		Var = 0x13,   // Followed by generic parameter number
+		Array = 0x14,   // <type> <rank> <boundsCount> <bound1>  <loCount> <lo1>
+		GenericInst = 0x15,   // <type> <type-arg-count> <type-1> ... <type-n> */
+		TypedByRef = 0x16,
+		I = 0x18,   // System.IntPtr
+		U = 0x19,   // System.UIntPtr
+		FnPtr = 0x1b,   // Followed by full method signature
+		Object = 0x1c,   // System.Object
+		SzArray = 0x1d,   // Single-dim array with 0 lower bound
+		MVar = 0x1e,   // Followed by generic parameter number
+		CModReqD = 0x1f,   // Required modifier : followed by a TypeDef or TypeRef token
+		CModOpt = 0x20,   // Optional modifier : followed by a TypeDef or TypeRef token
+		Internal = 0x21,   // Implemented within the CLI
+		Modifier = 0x40,   // Or'd with following element types
+		Sentinel = 0x41,   // Sentinel for varargs method signature
+		Pinned = 0x45,   // Denotes a local variable that points at a pinned object
+
+		// special undocumented constants
+		Type = 0x50,
+		Boxed = 0x51,
+		Enum = 0x55
+	}
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio