System.Threading
A stub version of .NET 4.0 contracts.
A dummy class that implements GetResourceString. Environment.GetResourceString(string) is an internal
method in mscorlib.dll.
An interface similar to the one added in .NET 4.0.
.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.
This internal class from mscorlib.dll is used by ConcurrentDictionary.
OperationCanceledException is changing from .NET 3.5 to .NET 4.0. To make Parallel Extensions work,
we include the new version as OperationCanceledException2.
A convenience class for common platform-related logic.
Gets the number of available processors available to this process on the current machine.
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.
A dummy replacement for the .NET internal class StackCrawlMark.
Represents a thread-safe collection of keys and values.
The type of the keys in the dictionary.
The type of the values in the dictionary.
All public and protected members of are thread-safe and may be used
concurrently from multiple threads.
Initializes a new instance of the
class that is empty, has the default concurrency level, has the default initial capacity, and
uses the default comparer for the key type.
Initializes a new instance of the
class that is empty, has the specified concurrency level and capacity, and uses the default
comparer for the key type.
The estimated number of threads that will update the
concurrently.
The initial number of elements that the
can contain.
is
less than 1.
is less than
0.
Initializes a new instance of the
class that contains elements copied from the specified , has the default concurrency
level, has the default initial capacity, and uses the default comparer for the key type.
The whose elements are copied to
the new
.
is a null reference
(Nothing in Visual Basic).
contains one or more
duplicate keys.
Initializes a new instance of the
class that is empty, has the specified concurrency level and capacity, and uses the specified
.
The
implementation to use when comparing keys.
is a null reference
(Nothing in Visual Basic).
Initializes a new instance of the
class that contains elements copied from the specified , has the default concurrency level, has the default
initial capacity, and uses the specified
.
The whose elements are copied to
the new
.
The
implementation to use when comparing keys.
is a null reference
(Nothing in Visual Basic). -or-
is a null reference (Nothing in Visual Basic).
Initializes a new instance of the
class that contains elements copied from the specified ,
has the specified concurrency level, has the specified initial capacity, and uses the specified
.
The estimated number of threads that will update the
concurrently.
The whose elements are copied to the new
.
The implementation to use
when comparing keys.
is a null reference (Nothing in Visual Basic).
-or-
is a null reference (Nothing in Visual Basic).
is less than 1.
contains one or more duplicate keys.
Initializes a new instance of the
class that is empty, has the specified concurrency level, has the specified initial capacity, and
uses the specified .
The estimated number of threads that will update the
concurrently.
The initial number of elements that the
can contain.
The
implementation to use when comparing keys.
is less than 1. -or-
is less than 0.
is a null reference
(Nothing in Visual Basic).
Attempts to add the specified key and value to the .
The key of the element to add.
The value of the element to add. The value can be a null reference (Nothing
in Visual Basic) for reference types.
true if the key/value pair was added to the
successfully; otherwise, false.
is null reference
(Nothing in Visual Basic).
The
contains too many elements.
Determines whether the contains the specified
key.
The key to locate in the .
true if the contains an element with
the specified key; otherwise, false.
is a null reference
(Nothing in Visual Basic).
Attempts to remove and return the the value with the specified key from the
.
The key of the element to remove and return.
When this method returns, contains the object removed from the
or the default value of
if the operation failed.
true if an object was removed successfully; otherwise, false.
is a null reference
(Nothing in Visual Basic).
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.
The key to search for and remove if it exists.
The variable into which the removed value, if found, is stored.
Whether removal of the key is conditional on its value.
The conditional value to compare against if is true
Attempts to get the value associated with the specified key from the .
The key of the value to get.
When this method returns, contains the object from
the
with the spedified key or the default value of
, if the operation failed.
true if the key was found in the ;
otherwise, false.
is a null reference
(Nothing in Visual Basic).
Compares the existing value for the specified key with a specified value, and if they’re equal,
updates the key with a third value.
The key whose value is compared with and
possibly replaced.
The value that replaces the value of the element with if the comparison results in equality.
The value that is compared to the value of the element with
.
true if the value with was equal to and replaced with ; otherwise,
false.
is a null
reference.
Removes all keys and values from the .
Copies the elements of the to an array of
type , starting at the
specified array index.
The one-dimensional array of type
that is the destination of the elements copied from the . The array must have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference
(Nothing in Visual Basic).
is less than
0.
is equal to or greater than
the length of the . -or- The number of elements in the source
is greater than the available space from to the end of the destination
.
Copies the key and value pairs stored in the to a
new array.
A new array containing a snapshot of key and value pairs copied from the .
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.
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.
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.
Returns an enumerator that iterates through the .
An enumerator for the .
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 was called.
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;
Adds a key/value pair to the
if the key does not already exist.
The key of the element to add.
The function used to generate a value for the key
is a null reference
(Nothing in Visual Basic).
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
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.
Adds a key/value pair to the
if the key does not already exist.
The key of the element to add.
the value to be added, if the key does not already exist
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
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.
Adds a key/value pair to the if the key does not already
exist, or updates a key/value pair in the if the key
already exists.
The key to be added or whose value should be updated
The function used to generate a value for an absent key
The function used to generate a new value for an existing key
based on the key's existing value
is a null reference
(Nothing in Visual Basic).
is a null reference
(Nothing in Visual Basic).
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
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).
Adds a key/value pair to the if the key does not already
exist, or updates a key/value pair in the if the key
already exists.
The key to be added or whose value should be updated
The value to be added for an absent key
The function used to generate a new value for an existing key based on
the key's existing value
is a null reference
(Nothing in Visual Basic).
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
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).
Adds the specified key and value to the .
The object to use as the key of the element to add.
The object to use as the value of the element to add.
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
An element with the same key already exists in the .
Removes the element with the specified key from the .
The key of the element to remove.
true if the element is successfully remove; otherwise false. This method also returns
false if
was not found in the original .
is a null reference
(Nothing in Visual Basic).
Adds the specified value to the
with the specified key.
The
structure representing the key and value to add to the .
The of is null.
The
contains too many elements.
An element with the same key already exists in the
Determines whether the
contains a specific key and value.
The
structure to locate in the .
true if the is found in the ; otherwise, false.
Removes a key and value from the dictionary.
The
structure representing the key and value to remove from the .
true if the key and value represented by is successfully
found and removed; otherwise, false.
The Key property of is a null reference (Nothing in Visual Basic).
Returns an enumerator that iterates through the .
An enumerator for the .
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 was called.
Adds the specified key and value to the dictionary.
The object to use as the key.
The object to use as the value.
is a null reference
(Nothing in Visual Basic).
The dictionary contains too many
elements.
is of a type that is not assignable to the key type of the . -or-
is of a type that is not assignable to ,
the type of values in the .
-or- A value with the same key already exists in the .
Gets whether the contains an
element with the specified key.
The key to locate in the .
true if the contains
an element with the specified key; otherwise, false.
is a null reference
(Nothing in Visual Basic).
Provides an for the
.
An for the .
Removes the element with the specified key from the .
The key of the element to remove.
is a null reference
(Nothing in Visual Basic).
Copies the elements of the to an array, starting
at the specified array index.
The one-dimensional array that is the destination of the elements copied from
the . The array must have zero-based
indexing.
The zero-based index in at which copying
begins.
is a null reference
(Nothing in Visual Basic).
is less than
0.
is equal to or greater than
the length of the . -or- The number of elements in the source
is greater than the available space from to the end of the destination
.
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.
Reference to the bucket table that was deemed too small.
Computes the bucket and lock number for a particular key.
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.
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.
Releases a contiguous range of locks.
Gets a collection containing the keys in the dictionary.
Gets a collection containing the values in the dictionary.
A helper method for asserts.
A helper function to obtain the string for a particular resource key.
Get the data array to be serialized
Construct the dictionary from a previously seiralized one
Gets or sets the value associated with the specified key.
The key of the value to get or set.
The value associated with the specified key. If the specified key is not found, a get
operation throws a
, and a set operation creates a new
element with the specified key.
is a null reference
(Nothing in Visual Basic).
The property is retrieved and
does not exist in the collection.
Gets the number of key/value pairs contained in the .
The dictionary contains too many
elements.
The number of key/value paris contained in the .
Count has snapshot semantics and represents the number of items in the
at the moment when Count was accessed.
Gets a value that indicates whether the is empty.
true if the is empty; otherwise,
false.
Gets a collection containing the keys in the .
An containing the keys in the
.
Gets a collection containing the values in the .
An containing the values in
the
.
Gets a value indicating whether the dictionary is read-only.
true if the is
read-only; otherwise, false. For , this property always returns
false.
Gets a value indicating whether the has a fixed size.
true if the has a
fixed size; otherwise, false. For , this property always
returns false.
Gets a value indicating whether the is read-only.
true if the is
read-only; otherwise, false. For , this property always
returns false.
Gets an containing the keys of the .
An containing the keys of the .
Gets an containing the values in the .
An containing the values in the .
Gets or sets the value associated with the specified key.
The key of the value to get or set.
The value associated with the specified key, or a null reference (Nothing in Visual Basic)
if is not in the dictionary or is of a type that is
not assignable to the key type of the .
is a null reference
(Nothing in Visual Basic).
A value is being assigned, and is of a type that is not assignable to the
key type of the . -or- A value is being
assigned, and is of a type that is not assignable to the value type
of the
Gets a value indicating whether access to the is
synchronized with the SyncRoot.
true if access to the is synchronized
(thread safe); otherwise, false. For , this property always
returns false.
Gets an object that can be used to synchronize access to the . This property is not supported.
The SyncRoot property is not supported.
The number of concurrent writes for which to optimize by default.
A node in a singly-linked list representing a particular hash table bucket.
A private class to represent enumeration over the dictionary that implements the
IDictionaryEnumerator interface.
Represents a thread-safe first-in, first-out collection of objects.
Specifies the type of elements in the queue.
All public and protected members of are thread-safe and may be used
concurrently from multiple threads.
Defines methods to manipulate thread-safe collections intended for producer/consumer usage.
Specifies the type of elements in the collection.
All implementations of this interface must enable all members of this interface
to be used concurrently from multiple threads.
Copies the elements of the to
an
, starting at a specified index.
The one-dimensional that is the destination of
the elements copied from the .
The array must have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is equal to or greater than the
length of the
-or- The number of elements in the source is greater than the
available space from to the end of the destination .
Attempts to add an object to the .
The object to add to the .
true if the object was added successfully; otherwise, false.
The was invalid for this collection.
Attempts to remove and return an object from the .
When this method returns, if the object was removed and returned successfully, contains the removed object. If no object was available to be removed, the value is
unspecified.
true if an object was removed and returned successfully; otherwise, false.
Copies the elements contained in the to a new array.
A new array containing the elements copied from the .
Initializes a new instance of the class.
Initializes the contents of the queue from an existing collection.
A collection from which to copy elements.
Initializes a new instance of the
class that contains elements copied from the specified collection
The collection whose elements are copied to the new .
The argument is
null.
Get the data array to be serialized
Construct the queue from a previously seiralized one
Copies the elements of the to an , starting at a particular
index.
The one-dimensional Array that is the
destination of the elements copied from the
. The Array must have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is multidimensional. -or-
does not have zero-based indexing. -or-
is equal to or greater than the length of the
-or- The number of elements in the source is
greater than the available space from to the end of the destination
. -or- The type of the source cannot be cast automatically to the type of the
destination .
Returns an enumerator that iterates through a collection.
An that can be used to iterate through the collection.
Attempts to add an object to the .
The object to add to the . The value can be a null
reference (Nothing in Visual Basic) for reference types.
true if the object was added successfully; otherwise, false.
For , this operation will always add the object to the
end of the
and return true.
Attempts to remove and return an object from the .
When this method returns, if the operation was successful, contains the
object removed. If no object was available to be removed, the value is unspecified.
true if an element was removed and returned succesfully; otherwise, false.
For , this operation will attempt to remove the object
from the beginning of the .
Copies the elements stored in the to a new array.
A new array containing a snapshot of elements copied from the .
Copies the elements to a new .
A new containing a snapshot of
elements copied from the .
Store the position of the current head and tail positions.
return the head segment
return the tail segment
return the head offset
return the tail offset
Copies the elements to an existing one-dimensional Array, starting at the specified array index.
The one-dimensional Array that is the
destination of the elements copied from the
. The Array must have zero-based
indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is equal to or greater than the
length of the
-or- The number of elements in the source is greater than the
available space from to the end of the destination .
Returns an enumerator that iterates through the .
An enumerator for the contents of the .
The enumeration represents a moment-in-time snapshot of the contents
of the queue. It does not reflect any updates to the collection after
was called. The enumerator is safe to use
concurrently with reads from and writes to the queue.
Adds an object to the end of the .
The object to add to the end of the . The value can be a null reference
(Nothing in Visual Basic) for reference types.
Attempts to remove and return the object at the beginning of the .
When this method returns, if the operation was successful, contains the
object removed. If no object was available to be removed, the value is unspecified.
true if an element was removed and returned from the beggining of the
succesfully; otherwise, false.
Attempts to return an object from the beginning of the
without removing it.
When this method returns, contains an object from
the beginning of the or an
unspecified value if the operation failed.
true if and object was returned successfully; otherwise, false.
Gets a value indicating whether access to the is
synchronized with the SyncRoot.
true if access to the is synchronized
with the SyncRoot; otherwise, false. For , this property always
returns false.
Gets an object that can be used to synchronize access to the . This property is not supported.
The SyncRoot property is not supported.
Gets a value that indicates whether the is empty.
true if the is empty; otherwise, false.
For determining whether the collection contains any items, use of this property is recommended
rather than retrieving the number of items from the 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 returns, thus invalidating
the result.
Gets the number of elements contained in the .
The number of elements contained in the .
For determining whether the collection contains any items, use of the
property is recommended rather than retrieving the number of items from the
property and comparing it to 0.
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.
Create and initialize a segment with the specified index.
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
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
the reference to the new Segment
Create a new segment and append to the current one
Update the m_tail pointer
This method is called when there is no contention
Try to append an element at the end of this segment.
the element to append
The tail.
true if the element is appended, false if the current segment is full
if appending the specified element succeeds, and after which the segment is full,
then grow the segment
try to remove an element from the head of current segment
The result.
The head.
return false only if the current segment is empty
try to peek the current segment
holds the return value of the element at the head position,
value set to default(T) if there is no such an element
true if there are elements in the current segment, false otherwise
Convert part or all of the current segment into a List
the start position
the end position
the result list
return the next segment
return true if the current segment is empty (doesn't have any element available to dequeue,
false otherwise
return the position of the head of the current segment
return the logical position of the tail of the current segment
Represents a thread-safe last-in, first-out collection of objects.
Specifies the type of elements in the stack.
All public and protected members of are thread-safe and may be used
concurrently from multiple threads.
Initializes a new instance of the
class.
Initializes a new instance of the
class that contains elements copied from the specified collection
The collection whose elements are copied to the new .
The argument is
null.
Initializes the contents of the stack from an existing collection.
A collection from which to copy elements.
Get the data array to be serialized
Construct the stack from a previously seiralized one
Removes all objects from the .
Copies the elements of the to an , starting at a particular
index.
The one-dimensional that is the destination of
the elements copied from the
. The must
have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is multidimensional. -or-
does not have zero-based indexing. -or-
is equal to or greater than the length of the
-or- The number of elements in the source is
greater than the available space from to the end of the destination
. -or- The type of the source cannot be cast automatically to the type of the
destination .
Copies the elements to an existing one-dimensional , starting at the specified array index.
The one-dimensional that is the destination of
the elements copied from the
. The must have zero-based
indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is equal to or greater than the
length of the
-or- The number of elements in the source is greater than the
available space from to the end of the destination .
Inserts an object at the top of the .
The object to push onto the . The value can be
a null reference (Nothing in Visual Basic) for reference types.
Inserts multiple objects at the top of the atomically.
The objects to push onto the .
is a null reference
(Nothing in Visual Basic).
When adding multiple items to the stack, using PushRange is a more efficient
mechanism than using 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 array will be pushed before items at higher indices.
Inserts multiple objects at the top of the atomically.
The objects to push onto the .
The zero-based offset in at which to begin
inserting elements onto the top of the .
The number of elements to be inserted onto the top of the .
is a null reference
(Nothing in Visual Basic).
or is negative. Or is greater than or equal to the length
of .
+ is
greater than the length of .
When adding multiple items to the stack, using PushRange is a more efficient
mechanism than using 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
array will be pushed before items at higher indices.
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
The head pointer to the new list
The tail pointer to the new list
Local helper function to validate the Pop Push range methods input
Attempts to add an object to the .
The object to add to the . The value can be a null
reference (Nothing in Visual Basic) for reference types.
true if the object was added successfully; otherwise, false.
For , this operation
will always insert the object onto the top of the
and return true.
Attempts to return an object from the top of the
without removing it.
When this method returns, contains an object from
the top of the or an
unspecified value if the operation failed.
true if and object was returned successfully; otherwise, false.
Attempts to pop and return the object at the top of the .
When this method returns, if the operation was successful, contains the
object removed. If no object was available to be removed, the value is unspecified.
true if an element was removed and returned from the top of the
succesfully; otherwise, false.
Attempts to pop and return multiple objects from the top of the
atomically.
The to which objects popped from the top of the will be added.
The number of objects successfully popped from the top of the and inserted in
.
is a null argument (Nothing
in Visual Basic).
When popping multiple items, if there is little contention on the stack, using
TryPopRange can be more efficient than using
once per item to be removed. Nodes fill the
with the first node to be popped at the startIndex, the second node to be popped
at startIndex + 1, and so on.
Attempts to pop and return multiple objects from the top of the
atomically.
The to which objects popped from the top of the will be added.
The zero-based offset in at which to begin
inserting elements from the top of the .
The number of elements to be popped from top of the and inserted into .
is a null reference
(Nothing in Visual Basic).
or is negative. Or is greater than or equal to the length
of .
+ is
greater than the length of .
When popping multiple items, if there is little contention on the stack, using
TryPopRange can be more efficient than using
once per item to be removed. Nodes fill the
with the first node to be popped at the startIndex, the second node to be popped
at startIndex + 1, and so on.
Local helper function to Pop an item from the stack, slow path
The popped item
True if succeeded, false otherwise
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.
The number of items to pop.
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.
True if an element was removed and returned; otherwise, false.
Local helper function to copy the poped elements into a given collection
The head of the list to be copied
The collection to place the popped items in
the beginning of index of where to place the popped items
The number of nodes.
Attempts to remove and return an object from the .
When this method returns, if the operation was successful, contains the
object removed. If no object was available to be removed, the value is unspecified.
true if an element was removed and returned succesfully; otherwise, false.
For , this operation will attempt to pope the object at
the top of the .
Copies the items stored in the to a new array.
A new array containing a snapshot of elements copied from the .
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.
An array of the list's contents.
Returns an enumerator that iterates through the .
An enumerator for the .
The enumeration represents a moment-in-time snapshot of the contents
of the stack. It does not reflect any updates to the collection after
was called. The enumerator is safe to use
concurrently with reads from and writes to the stack.
Returns an enumerator that iterates through a collection.
An that can be used to iterate through
the collection.
The enumeration represents a moment-in-time snapshot of the contents of the stack. It does not
reflect any updates to the collection after
was called. The enumerator is safe to use concurrently with reads
from and writes to the stack.
Gets a value that indicates whether the is empty.
true if the is empty; otherwise, false.
For determining whether the collection contains any items, use of this property is recommended
rather than retrieving the number of items from the 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 returns, thus invalidating
the result.
Gets the number of elements contained in the .
The number of elements contained in the .
For determining whether the collection contains any items, use of the
property is recommended rather than retrieving the number of items from the
property and comparing it to 0.
Gets a value indicating whether access to the is
synchronized with the SyncRoot.
true if access to the is synchronized
with the SyncRoot; otherwise, false. For , this property always
returns false.
Gets an object that can be used to synchronize access to the . This property is not supported.
The SyncRoot property is not supported
A simple (internal) node type used to store elements of concurrent stacks and queues.
Constructs a new node with the specified value and no next node.
The value of the node.
A debugger view of the IProducerConsumerCollection that makes it simple to browse the
collection's contents at a point in time.
The type of elements stored within.
Constructs a new debugger view object for the provided collection object.
A collection to browse in the debugger.
Returns a snapshot of the underlying collection's elements.
Represents a particular manner of splitting an orderable data source into multiple partitions.
Type of the elements in the collection.
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.
Inheritors of must adhere to the following rules:
- 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.
- All indices must be non-negative. If any indices are negative, consumers of the implementation
may throw exceptions.
- and should throw a
if the requested partition count is less than or
equal to zero.
- and 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 .
- , ,
, and
should never return null. If null is returned, a consumer of the implementation may throw a
.
- , ,
, and
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.
- If returns true, each partition must return elements
with increasing key indices.
- If returns true, all the keys in partition numbered N
must be larger than all the keys in partition numbered N-1.
- If returns true, all indices must be monotonically increasing from
0, though not necessarily within a single partition.
Represents a particular manner of splitting a data source into multiple partitions.
Type of the elements in the collection.
Inheritors of must adhere to the following rules:
- should throw a
if the requested partition count is less than or
equal to zero.
- 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 .
- and
should never return null. If null is returned, a consumer of the implementation may throw a
.
- and 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.
Partitions the underlying collection into the given number of partitions.
The number of partitions to create.
A list containing enumerators.
Creates an object that can partition the underlying collection into a variable number of
partitions.
The returned object implements the interface. Calling GetEnumerator on the
object creates another partition over the sequence.
The method is only supported if the
property returns true.
An object that can create partitions over the underlying data source.
Dynamic partitioning is not supported by this
partitioner.
Gets whether additional partitions can be created dynamically.
true if the can create partitions dynamically as they are
requested; false if the can only allocate
partitions statically.
If a derived class does not override and implement ,
should return false. The value of should not vary over the lifetime of this instance.
Initializes a new instance of the class with the
specified constraints on the index keys.
Indicates whether the elements in each partition are yielded in the order of
increasing keys.
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.
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.
Partitions the underlying collection into the specified number of orderable partitions.
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.
The number of partitions to create.
A list containing enumerators.
Creates an object that can partition the underlying collection into a variable number of
partitions.
The returned object implements the interface. Calling GetEnumerator on the
object creates another partition over the sequence.
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.
The method is only supported if the SupportsDynamicPartitions
property returns true.
An object that can create partitions over the underlying data source.
Dynamic partitioning is not supported by this
partitioner.
Partitions the underlying collection into the given number of ordered partitions.
The default implementation provides the same behavior as except
that the returned set of partitions does not provide the keys for the elements.
The number of partitions to create.
A list containing enumerators.
Creates an object that can partition the underlying collection into a variable number of
partitions.
The returned object implements the interface. Calling GetEnumerator on the
object creates another partition over the sequence.
The default implementation provides the same behavior as except
that the returned set of partitions does not provide the keys for the elements.
The method is only supported if the
property returns true.
An object that can create partitions over the underlying data source.
Dynamic partitioning is not supported by this
partitioner.
Gets whether elements in each partition are yielded in the order of increasing keys.
Gets whether elements in an earlier partition always come before elements in a later partition.
If 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.
Gets whether order keys are normalized.
If 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.
Converts an enumerable over key-value pairs to an enumerable over values.
Provides common partitioning strategies for arrays, lists, and enumerables.
The static methods on 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.
Creates an orderable partitioner from an
instance.
Type of the elements in source list.
The list to be partitioned.
A Boolean value that indicates whether the created partitioner should dynamically
load balance between partitions rather than statically partition.
An orderable partitioner based on the input list.
Creates an orderable partitioner from a instance.
Type of the elements in source array.
The array to be partitioned.
A Boolean value that indicates whether the created partitioner should dynamically load balance
between partitions rather than statically partition.
An orderable partitioner based on the input array.
Creates an orderable partitioner from a instance.
Type of the elements in source enumerable.
The enumerable to be partitioned.
An orderable partitioner based on the input array.
The ordering used in the created partitioner is determined by the natural order of the elements
as retrieved from the source enumerable.
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.
Type of the elements in the data source
Type of the reader on the data source
Abstract method to request a contiguous chunk of elements from the source collection
specified number of elements requested
true if we successfully reserved at least one element (up to #=requestedChunkSize)
false if all elements in the source collection have been reserved.
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.
Reset on partitions is not supported
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.
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.
Abstract property, returns whether or not the shared reader has already read the last
element of the source data
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
Get the current element in the current partition. Property required by IEnumerator interface
Inherits from DynamicPartitioners
Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
of EnumerableOfPartitionsForIEnumerator defined internally
Type of elements in the source data
Overrides OrderablePartitioner.GetOrderablePartitions.
Partitions the underlying collection into the given number of orderable partitions.
number of partitions requested
A list containing enumerators.
Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
a enumerable collection of orderable partitions
Whether additional partitions can be created dynamically.
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"
Inherits from DynamicPartitionEnumerator_Abstract directly
Provides customized implementation for: GrabNextChunk, HasNoElementsLeft, Current, Dispose
Reserves a contiguous range of elements from source data
specified number of elements requested
true if we successfully reserved at least one element (up to #=requestedChunkSize)
false if all elements in the source collection have been reserved.
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
Returns whether or not the shared reader has already read the last
element of the source data
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
Dynamic load-balance partitioner. This class is abstract and to be derived from by
the customized partitioner classes for IList, Array, and IEnumerable
Type of the elements in the source data
Type of the source data collection
Constructs a new orderable partitioner
source data collection
Partition the source data and create an enumerable over the resulting partitions.
the source data collection
an enumerable of partitions of
Overrides OrderablePartitioner.GetOrderablePartitions.
Partitions the underlying collection into the given number of orderable partitions.
number of partitions requested
A list containing enumerators.
Overrides OrderablePartitioner.GetOrderableDyanmicPartitions
a enumerable collection of orderable partitions
Whether additional partitions can be created dynamically.
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
Type of the elements in the data source
Type of the reader on the source data
Reserves a contiguous range of elements from source data
specified number of elements requested
true if we successfully reserved at least one element (up to #=requestedChunkSize)
false if all elements in the source collection have been reserved.
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.
Get the number of elements from the source reader.
It calls IList.Count or Array.Length
Returns whether or not the shared reader has already read the last
element of the source data
Inherits from DynamicPartitioners
Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
of EnumerableOfPartitionsForIList defined internally
Type of elements in the source data
Inherits from PartitionList_Abstract
Provides customized implementation for source data of IList
Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
Provides customized implementation of SourceCount property and Current property for IList
return a KeyValuePair of the current element and its key
Inherits from DynamicPartitioners
Provides customized implementation of GetOrderableDynamicPartitions_Factory method, to return an instance
of EnumerableOfPartitionsForArray defined internally
Type of elements in the source data
Inherits from PartitionList_Abstract
Provides customized implementation for source data of Array
Inherits from DynamicPartitionEnumeratorForIndexRange_Abstract
Provides customized implementation of SourceCount property and Current property for Array
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.
type of the elements
Type of the source data collection
Abstract method to create a partition that covers a range over source data,
starting from "startIndex", ending at "endIndex"
start index of the current partition on the source data
end index of the current partition on the source data
a partition enumerator over the specified range
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>N), the last x-N partitions are empty enumerators.
An empty enumerator is indicated by
(m_startIndex == list.Count && m_endIndex == list.Count -1)
specified number of partitions
a list of partitions
Abstract method to return the number of elements in the source data
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.
Constructs an instance of StaticIndexRangePartition
the start index in the source collection for the current partition
the end index in the source collection for the current partition
We don't dispose the source for IList and array
Moves to the next item
Before the first MoveNext is called: m_offset == m_startIndex-1;
true if successful, false if there is no item left
Current Property is different for IList and Array. Arrays calls 'ldelem' instructions for faster
element retrieval.
Inherits from StaticIndexRangePartitioner
Provides customized implementation of SourceCount and CreatePartition
Inherits from StaticIndexRangePartition
Provides customized implementation of Current property
Inherits from StaticIndexRangePartitioner
Provides customized implementation of SourceCount and CreatePartition for Array
Inherits from StaticIndexRangePartitioner
Provides customized implementation of SourceCount and CreatePartition
A very simple primitive that allows us to share a value across multiple threads.
Represents one or more errors that occur during application execution.
is used to consolidate multiple failures into a single, throwable
exception object.
Initializes a new instance of the class.
Initializes a new instance of the class with
a specified error message.
The error message that explains the reason for the exception.
Initializes a new instance of the class with a specified error
message and a reference to the inner exception that is the cause of this exception.
The error message that explains the reason for the exception.
The exception that is the cause of the current exception.
The argument
is null.
Initializes a new instance of the class with
references to the inner exceptions that are the cause of this exception.
The exceptions that are the cause of the current exception.
The argument
is null.
An element of is
null.
Initializes a new instance of the class with
references to the inner exceptions that are the cause of this exception.
The exceptions that are the cause of the current exception.
The argument
is null.
An element of is
null.
Initializes a new instance of the class with a specified error
message and references to the inner exceptions that are the cause of this exception.
The error message that explains the reason for the exception.
The exceptions that are the cause of the current exception.
The argument
is null.
An element of is
null.
Initializes a new instance of the class with a specified error
message and references to the inner exceptions that are the cause of this exception.
The error message that explains the reason for the exception.
The exceptions that are the cause of the current exception.
The argument
is null.
An element of is
null.
Allocates a new aggregate exception with the specified message and list of inner exceptions.
The error message that explains the reason for the exception.
The exceptions that are the cause of the current exception.
The argument
is null.
An element of is
null.
Initializes a new instance of the class with serialized data.
The that holds
the serialized object data about the exception being thrown.
The that
contains contextual information about the source or destination.
The argument is null.
The exception could not be deserialized correctly.
Sets the with information about
the exception.
The that holds
the serialized object data about the exception being thrown.
The that
contains contextual information about the source or destination.
The argument is null.
Returns the that is the root cause of this exception.
Invokes a handler on each contained by this .
The predicate to execute for each exception. The predicate accepts as an
argument the to be processed and returns a Boolean to indicate
whether the exception was handled.
Each invocation of the returns true or false to indicate whether the
was handled. After all invocations, if any exceptions went
unhandled, all unhandled exceptions will be put into a new
which will be thrown. Otherwise, the method simply returns. If any
invocations of the throws an exception, it will halt the processing
of any more exceptions and immediately propagate the thrown exception as-is.
An exception contained by this was not handled.
The argument is
null.
Flattens an instances into a single, new instance.
A new, flattened .
If any inner exceptions are themselves instances of
, this method will recursively flatten all of them. The
inner exceptions returned in the new
will be the union of all of the the inner exceptions from exception tree rooted at the provided
instance.
Creates and returns a string representation of the current .
A string representation of the current exception.
Gets a read-only collection of the instances that caused the
current exception.
Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter.
Propogates notification that operations should be canceled.
A 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,
CancellationTokenSource must be used.
CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its
Token property.
Once canceled, a token may not transition to a non-canceled state, and a token whose
is false will never change to one that can be canceled.
All members of this struct are thread-safe and may be used concurrently from multiple threads.
Internal constructor only a CancellationTokenSource should create a CancellationToken
Initializes the CancellationToken.
The canceled state for the token.
Tokens created with this constructor will remain in the canceled state specified
by the parameter. If is false,
both and will be false.
If is true,
both and will be true.
Registers a delegate that will be called when this CancellationToken is canceled.
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.
The current ExecutionContext, if one exists, will be captured
along with the delegate and will be used when executing it.
The delegate to be executed when the CancellationToken is canceled.
The instance that can
be used to deregister the callback.
is null.
The associated CancellationTokenSource has been disposed.
Registers a delegate that will be called when this
CancellationToken is canceled.
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.
The current ExecutionContext, if one exists, will be captured
along with the delegate and will be used when executing it.
The delegate to be executed when the CancellationToken is canceled.
A Boolean value that indicates whether to capture
the current SynchronizationContext and use it
when invoking the .
The instance that can
be used to deregister the callback.
is null.
The associated CancellationTokenSource has been disposed.
Registers a delegate that will be called when this
CancellationToken is canceled.
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.
The current ExecutionContext, if one exists, will be captured
along with the delegate and will be used when executing it.
The delegate to be executed when the CancellationToken is canceled.
The state to pass to the when the delegate is invoked. This may be null.
The instance that can
be used to deregister the callback.
is null.
The associated CancellationTokenSource has been disposed.
Registers a delegate that will be called when this
CancellationToken is canceled.
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.
The current ExecutionContext, if one exists,
will be captured along with the delegate and will be used when executing it.
The delegate to be executed when the CancellationToken is canceled.
The state to pass to the when the delegate is invoked. This may be null.
A Boolean value that indicates whether to capture
the current SynchronizationContext and use it
when invoking the .
The instance that can
be used to deregister the callback.
is null.
The associated CancellationTokenSource has been disposed.
Determines whether the current CancellationToken instance is equal to the
specified token.
The other CancellationToken to which to compare this
instance.
True if the instances are equal; otherwise, false. Two tokens are equal if they are associated
with the same CancellationTokenSource or if they were both constructed
from public CancellationToken constructors and their values are equal.
Determines whether the current CancellationToken instance is equal to the
specified .
The other object to which to compare this instance.
True if is a CancellationToken
and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated
with the same CancellationTokenSource or if they were both constructed
from public CancellationToken constructors and their values are equal.
An associated CancellationTokenSource has been disposed.
Serves as a hash function for a CancellationToken.
A hash code for the current CancellationToken instance.
Determines whether two CancellationToken instances are equal.
The first instance.
The second instance.
True if the instances are equal; otherwise, false.
An associated CancellationTokenSource has been disposed.
Determines whether two CancellationToken instances are not equal.
The first instance.
The second instance.
True if the instances are not equal; otherwise, false.
An associated CancellationTokenSource has been disposed.
Throws a OperationCanceledException if
this token has had cancellation requested.
This method provides functionality equivalent to:
if (token.IsCancellationRequested)
throw new OperationCanceledException(token);
The token has had cancellation requested.
The associated CancellationTokenSource has been disposed.
Returns an empty CancellationToken value.
The value returned by this property will be non-cancelable by default.
Gets whether cancellation has been requested for this token.
Whether cancellation has been requested for this token.
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 Cancel
on the token's associated .
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.
Gets whether this token is capable of being in the canceled state.
If CanBeCanceled returns false, it is guaranteed that the token will never transition
into a canceled state, meaning that will never
return true.
Gets a that is signaled when the token is canceled.
Accessing this property causes a WaitHandle
to be instantiated. It is preferable to only use this property when necessary, and to then
dispose the associated instance at the earliest opportunity (disposing
the source will dispose of this allocated handle). The handle should not be closed or disposed directly.
The associated CancellationTokenSource has been disposed.
Represents a callback delegate that has been registered with a CancellationToken.
To unregister a callback, dispose the corresponding Registration instance.
Attempts to deregister the item. If it's already being run, this may fail.
Entails a full memory fence.
True if the callback was found and deregistered, false otherwise.
Disposes of the registration and unregisters the target callback from the associated
CancellationToken.
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.
Determines whether two CancellationTokenRegistration
instances are equal.
The first instance.
The second instance.
True if the instances are equal; otherwise, false.
Determines whether two CancellationTokenRegistration instances are not equal.
The first instance.
The second instance.
True if the instances are not equal; otherwise, false.
Determines whether the current CancellationTokenRegistration instance is equal to the
specified .
The other object to which to compare this instance.
True, if both this and are equal. False, otherwise.
Two CancellationTokenRegistration instances are equal if
they both refer to the output of a single call to the same Register method of a
CancellationToken.
Determines whether the current CancellationToken instance is equal to the
specified .
The other CancellationTokenRegistration to which to compare this instance.
True, if both this and are equal. False, otherwise.
Two CancellationTokenRegistration instances are equal if
they both refer to the output of a single call to the same Register method of a
CancellationToken.
Serves as a hash function for a CancellationTokenRegistration..
A hash code for the current CancellationTokenRegistration instance.
Signals to a that it should be canceled.
is used to instantiate a
(via the source's Token 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 Cancel
method.
All members of this class, except Dispose, are thread-safe and may be used
concurrently from multiple threads.
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.
Initializes the .
Communicates a request for cancellation.
The associated will be
notified of the cancellation and will transition to a state where
IsCancellationRequested returns true.
Any callbacks or cancelable operations
registered with the will be executed.
Cancelable operations and callbacks registered with the token should not throw exceptions.
However, this overload of Cancel will aggregate any exceptions thrown into a ,
such that one callback throwing an exception will not prevent other registered callbacks from being executed.
The that was captured when each callback was registered
will be reestablished when the callback is invoked.
An aggregate exception containing all the exceptions thrown
by the registered callbacks on the associated .
This has been disposed.
Communicates a request for cancellation.
The associated will be
notified of the cancellation and will transition to a state where
IsCancellationRequested returns true.
Any callbacks or cancelable operations
registered with the will be executed.
Cancelable operations and callbacks registered with the token should not throw exceptions.
If is true, an exception will immediately propagate out of the
call to Cancel, preventing the remaining callbacks and cancelable operations from being processed.
If is false, this overload will aggregate any
exceptions thrown into a ,
such that one callback throwing an exception will not prevent other registered callbacks from being executed.
The that was captured when each callback was registered
will be reestablished when the callback is invoked.
Specifies whether exceptions should immediately propagate.
An aggregate exception containing all the exceptions thrown
by the registered callbacks on the associated .
This has been disposed.
Releases the resources used by this .
This method is not thread-safe for any other concurrent calls.
Throws an exception if the source has been disposed.
InternalGetStaticSource()
Whether the source should be set.
A static source to be shared among multiple tokens.
Registers a callback object. If cancellation has already occurred, the
callback will have been run by the time this method returns.
Invoke the Canceled event.
The handlers are invoked synchronously in LIFO order.
Creates a CancellationTokenSource that will be in the canceled state
when any of the source tokens are in the canceled state.
The first CancellationToken to observe.
The second CancellationToken to observe.
A CancellationTokenSource that is linked
to the source tokens.
A CancellationTokenSource associated with
one of the source tokens has been disposed.
Creates a CancellationTokenSource that will be in the canceled state
when any of the source tokens are in the canceled state.
The CancellationToken instances to observe.
A CancellationTokenSource that is linked
to the source tokens.
is null.
A CancellationTokenSource associated with
one of the source tokens has been disposed.
Gets whether cancellation has been requested for this CancellationTokenSource.
Whether cancellation has been requested for this CancellationTokenSource.
This property indicates whether cancellation has been requested for this token source, such as
due to a call to its
Cancel method.
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.
A simple helper to determine whether cancellation has finished.
A simple helper to determine whether disposal has occured.
The ID of the thread that is running callbacks.
Gets the CancellationToken
associated with this .
The CancellationToken
associated with this .
The token source has been
disposed.
The currently executing callback
A helper class for collating the various bits of information required to execute
cancellation callbacks.
InternalExecuteCallbackSynchronously_GeneralPath
This will be called on the target synchronization context, however, we still need to restore the required execution context
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).
The kind of elements contained within.
Allocates a new array with the given initial size.
How many array slots to pre-allocate.
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.
The element to add.
Information about where the add happened, to enable O(1) deregistration.
The head of the doubly linked list.
The tail of the doubly linked list.
A struct to hold a link to the exact spot in an array an element was inserted, enabling
constant time removal later on.
A fragment of a sparsely populated array, doubly linked.
The kind of elements contained within.
Represents a synchronization primitive that is signaled when its count reaches zero.
All public and protected members of 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 have
completed, and Reset, which should only be used when no other threads are
accessing the event.
Initializes a new instance of class with the
specified count.
The number of signals required to set the .
is less
than 0.
Releases all resources used by the current instance of .
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
When overridden in a derived class, releases the unmanaged resources used by the
, and optionally releases the managed resources.
true to release both managed and unmanaged resources; false to release
only unmanaged resources.
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
Registers a signal with the , decrementing its
count.
true if the signal caused the count to reach zero and the event was set; otherwise,
false.
The current instance is already set.
The current instance has already been
disposed.
Registers multiple signals with the ,
decrementing its count by the specified amount.
The number of signals to register.
true if the signals caused the count to reach zero and the event was set; otherwise,
false.
The current instance is already set. -or- Or is greater than .
is less
than 1.
The current instance has already been
disposed.
Increments the 's current count by one.
The current instance is already
set.
is equal to .
The current instance has already been disposed.
Attempts to increment the 's current count by one.
true if the increment succeeded; otherwise, false. If is
already at zero. this will return false.
is equal to .
The current instance has already been
disposed.
Increments the 's current count by a specified
value.
The value by which to increase .
is less than
0.
The current instance is already
set.
is equal to .
The current instance has already been
disposed.
Attempts to increment the 's current count by a
specified value.
The value by which to increase .
true if the increment succeeded; otherwise, false. If is
already at zero this will return false.
is less
than 0.
The current instance is already
set.
is equal to .
The current instance has already been
disposed.
Resets the to the value of .
Unlike most of the members of , Reset is not
thread-safe and may not be used concurrently with other members of this instance.
The current instance has already been
disposed..
Resets the to a specified value.
The number of signals required to set the .
Unlike most of the members of , Reset is not
thread-safe and may not be used concurrently with other members of this instance.
is
less than 0.
The current instance has alread been disposed.
Blocks the current thread until the is set.
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.
The current instance has already been
disposed.
Blocks the current thread until the is set, while
observing a .
The to
observe.
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
CancellationToken being observed
is canceled during the wait operation, an
will be thrown.
has been
canceled.
The current instance has already been
disposed.
Blocks the current thread until the is set, using a
to measure the time interval.
A that represents the number of
milliseconds to wait, or a that represents -1 milliseconds to
wait indefinitely.
true if the was set; otherwise,
false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
The current instance has already been
disposed.
Blocks the current thread until the is set, using
a to measure the time interval, while observing a
.
A that represents the number of
milliseconds to wait, or a that represents -1 milliseconds to
wait indefinitely.
The to
observe.
true if the was set; otherwise,
false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
The current instance has already been
disposed.
has
been canceled.
Blocks the current thread until the is set, using a
32-bit signed integer to measure the time interval.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if the was set; otherwise,
false.
is a
negative number other than -1, which represents an infinite time-out.
The current instance has already been
disposed.
Blocks the current thread until the is set, using a
32-bit signed integer to measure the time interval, while observing a
.
The number of milliseconds to wait, or (-1) to wait indefinitely.
The to
observe.
true if the was set; otherwise,
false.
is a
negative number other than -1, which represents an infinite time-out.
The current instance has already been
disposed.
has
been canceled.
Throws an exception if the latch has been disposed.
Gets the number of remaining signals required to set the event.
The number of remaining signals required to set the event.
Gets the numbers of signals initially required to set the event.
The number of signals initially required to set the event.
Determines whether the event is set.
true if the event is set; otherwise, false.
Gets a that is used to wait for the event to be set.
A that is used to wait for the event to be set.
The current instance has already been disposed.
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
to be set, the method should be preferred.
Provides a slimmed down version of .
All public and protected members of 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 have
completed, and Reset, which should only be used when no other threads are
accessing the event.
Initializes a new instance of the
class with an initial state of nonsignaled.
Initializes a new instance of the
class with a Boolen value indicating whether to set the intial state to signaled.
true to set the initial state signaled; false to set the initial state
to nonsignaled.
Initializes a new instance of the
class with a Boolen value indicating whether to set the intial state to signaled and a specified
spin count.
true to set the initial state to signaled; false to set the initial state
to nonsignaled.
The number of spin waits that will occur before falling back to a true
wait.
is less than
0 or greater than the maximum allowed value.
Initializes the internal state of the event.
Whether the event is set initially or not.
The spin count that decides when the event will block.
Helper to ensure the lock object is created before first use.
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.
True if a new event was created and stored, false otherwise.
Sets the state of the event to signaled, which allows one or more threads waiting on the event to
proceed.
Private helper to actually perform the Set.
Indicates whether we are calling Set() during cancellation.
The object has been canceled.
Sets the state of the event to nonsignaled, which causes threads to block.
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
Blocks the current thread until the current is set.
The maximum number of waiters has been exceeded.
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.
Blocks the current thread until the current receives a signal,
while observing a .
The to
observe.
The maximum number of waiters has been exceeded.
was
canceled.
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.
Blocks the current thread until the current is set, using a
to measure the time interval.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
true if the was set; otherwise,
false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
The maximum number of waiters has been exceeded.
Blocks the current thread until the current is set, using a
to measure the time interval, while observing a .
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
The to
observe.
true if the was set; otherwise,
false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
was canceled.
The maximum number of waiters has been exceeded.
Blocks the current thread until the current is set, using a
32-bit signed integer to measure the time interval.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if the was set; otherwise,
false.
is a
negative number other than -1, which represents an infinite time-out.
The maximum number of waiters has been exceeded.
Blocks the current thread until the current is set, using a
32-bit signed integer to measure the time interval, while observing a .
The number of milliseconds to wait, or (-1) to wait indefinitely.
The to
observe.
true if the was set; otherwise,
false.
is a
negative number other than -1, which represents an infinite time-out.
The maximum number of waiters has been exceeded.
was canceled.
Releases all resources used by the current instance of .
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
When overridden in a derived class, releases the unmanaged resources used by the
, and optionally releases the managed resources.
true to release both managed and unmanaged resources;
false to release only unmanaged resources.
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
Throw ObjectDisposedException if the MRES is disposed
Private helper method to wake up waiters when a cancellationToken gets canceled.
Private helper method for updating parts of a bit-string state value.
Mainly called from the IsSet and Waiters properties setters
Note: the parameter types must be int as CompareExchange cannot take a Uint
The new value
The mask used to set the bits
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?
Performs a Mask operation, but does not perform the shift.
This is acceptable for boolean values for which the shift is unnecessary
eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using
((val & Mask) >> shiftAmount) == 1
?? is there a common place to put this rather than being private to MRES?
Helper function to measure and update the wait time
The first time (in Ticks) observed when the wait started.
The orginal wait timeoutout in milliseconds.
The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters
has occurred.
Gets the underlying object for this .
The underlying event object fore this .
Accessing this property forces initialization of an underlying event object if one hasn't
already been created. To simply wait on this ,
the public Wait methods should be preferred.
Gets whether the event is set.
true if the event has is set; otherwise, false.
Gets the number of spin waits that will be occur before falling back to a true wait.
How many threads are waiting.
Provides support for lazy initialization.
Specifies the type of element being laziliy initialized.
By default, all public and protected members of 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.
Initializes a new instance of the class that
uses 's default constructor for lazy initialization.
An instance created with this constructor may be used concurrently from multiple threads.
Initializes a new instance of the class that uses a
specified initialization function.
The invoked to produce the lazily-initialized value when it is
needed.
is a null
reference (Nothing in Visual Basic).
An instance created with this constructor may be used concurrently from multiple threads.
Initializes a new instance of the
class that uses 's default constructor and a specified thread-safety mode.
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.
Initializes a new instance of the
class that uses 's default constructor and a specified thread-safety mode.
The lazy thread-safety mode mode
mode contains an invalid valuee
Initializes a new instance of the class
that uses a specified initialization function and a specified thread-safety mode.
The invoked to produce the lazily-initialized value when it is needed.
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.
is
a null reference (Nothing in Visual Basic).
Initializes a new instance of the class
that uses a specified initialization function and a specified thread-safety mode.
The invoked to produce the lazily-initialized value when it is needed.
The lazy thread-safety mode.
is
a null reference (Nothing in Visual Basic).
mode contains an invalid value.
Static helper function that returns an object based on the given mode. it also throws an exception if the mode is invalid
Forces initialization during serialization.
The StreamingContext for the serialization operation.
Creates and returns a string representation of this instance.
The result of calling on the .
The is null.
local helper method to initialize the value
The inititialized T value
Creates an instance of T using m_valueFactory in case its not null or use reflection to create a new T()
An instance of Boxed.
Gets the value of the Lazy<T> for debugging display purposes.
Gets a value indicating whether this instance may be used concurrently from multiple threads.
Gets whether the value creation is faulted or not
Gets a value indicating whether the has been initialized.
true if the instance has been initialized;
otherwise, false.
The initialization of a instance may result in either
a value being produced or an exception being thrown. If an exception goes unhandled during initialization,
will return false.
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
Wrapper class to wrap the excpetion thrown by the value factory
A debugger view of the Lazy<T> to surface additional debugging properties and
to ensure that the Lazy<T> does not become initialized if it was not already.
Constructs a new debugger view object for the provided Lazy object.
A Lazy object to browse in the debugger.
Returns whether the Lazy object is initialized or not.
Returns the value of the Lazy object.
Returns the execution mode of the Lazy object
Returns the execution mode of the Lazy object
Specifies how a instance should synchronize access among multiple threads.
This mode makes no guarantees around the thread-safety of the instance. If used from multiple threads, the behavior of the is undefined.
This mode should be used when a is guaranteed to never be initialized from more than one thread simultaneously and high performance is crucial.
If valueFactory throws an exception when the is initialized, the exception will be cached and returned on subsequent accesses to Value. Also, if valueFactory recursively
accesses Value on this instance, a will be thrown.
When multiple threads attempt to simultaneously initialize a 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 .
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 instance, an exception will NOT be thrown.
This mode uses locks to ensure that only a single thread can initialize a instance in a thread-safe manner. In general,
taken if this mode is used in conjunction with a valueFactory delegate that uses locks internally, a deadlock can occur if not
handled carefully. If valueFactory throws an exception when the is initialized, the exception will be cached and returned on
subsequent accesses to Value. Also, if valueFactory recursively accesses Value on this instance, a will be thrown.
Provides lazy initialization routines.
These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using
references to ensure targets have been initialized as they are accessed.
Initializes a target reference type with the type's default constructor if the target has not
already been initialized.
The refence type of the reference to be initialized.
A reference of type to initialize if it has not
already been initialized.
The initialized reference of type .
Type does not have a default
constructor.
Permissions to access the constructor of type were missing.
This method may only be used on reference types. To ensure initialization of value
types, see other overloads of EnsureInitialized.
This method may be used concurrently by multiple threads to initialize .
In the event that multiple threads access this method concurrently, multiple instances of
may be created, but only one will be stored into . 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.
Initializes a target reference type using the specified function if it has not already been
initialized.
The reference type of the reference to be initialized.
The reference of type to initialize if it has not
already been initialized.
The invoked to initialize the
reference.
The initialized reference of type .
Type does not have a
default constructor.
returned
null.
This method may only be used on reference types, and 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.
This method may be used concurrently by multiple threads to initialize .
In the event that multiple threads access this method concurrently, multiple instances of
may be created, but only one will be stored into . 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.
Initialize the target using the given delegate (slow path).
The reference type of the reference to be initialized.
The variable that need to be initialized
The delegate that will be executed to initialize the target
The initialized variable
Initializes a target reference or value type with its default constructor if it has not already
been initialized.
The type of the reference to be initialized.
A reference or value of type to initialize if it
has not already been initialized.
A reference to a boolean that determines whether the target has already
been initialized.
A reference to an object used as the mutually exclusive lock for initializing
.
The initialized value of type .
Initializes a target reference or value type with a specified function if it has not already been
initialized.
The type of the reference to be initialized.
A reference or value of type to initialize if it
has not already been initialized.
A reference to a boolean that determines whether the target has already
been initialized.
A reference to an object used as the mutually exclusive lock for initializing
.
The invoked to initialize the
reference or value.
The initialized value of type .
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.
The type of target.
A reference to the target to be initialized.
A reference to a location tracking whether the target has been initialized.
A reference to a location containing a mutual exclusive lock.
The to invoke in order to produce the lazily-initialized value.
The initialized object.
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
Provides thread-local storage of data.
Specifies the type of data stored per-thread.
With the exception of , all public and protected members of
are thread-safe and may be used
concurrently from multiple threads.
Initializes the instance.
Initializes the instance with the
specified function.
The invoked to produce a lazily-initialized value when
an attempt is made to retrieve without it having been previously initialized.
is a null reference (Nothing in Visual Basic).
Releases the resources used by this instance.
Releases the resources used by this instance.
Unlike most of the members of , this method is not thread-safe.
Releases the resources used by this instance.
A Boolean value that indicates whether this method is being called due to a call to .
Unlike most of the members of , this method is not thread-safe.
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
True if there is an index available, false otherwise
Gets an array of types that will be used as generic parameters for the GenericHolder class
The types array
Creates and returns a string representation of this instance for the current thread.
The result of calling on the .
The for the current thread is a null reference (Nothing in Visual Basic).
The initialization function referenced in an improper manner.
The instance has been disposed.
Calling this method forces initialization for the current thread, as is the
case with accessing directly.
Private helper function to lazily create the value using the calueSelector if specified in the constructor or the default parameterless constructor
Returns the boxed object
Gets or sets the value of this instance for the current thread.
The initialization function referenced in an improper manner.
The instance has been disposed.
If this instance was not previously initialized for the current thread,
accessing 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 . Otherwise, the default value of
will be used.
Gets whether is initialized on the current thread.
The instance has been disposed.
Gets the value of the ThreadLocal<T> for debugging display purposes. It takes care of getting
the value for the current thread in the ThreadLocal mode.
The base abstract class for the holder
The TLS holder representation
The generic holder representation
Dummy param
Dummy param
Dummy param
wrapper to the actual value
A debugger view of the ThreadLocal<T> to surface additional debugging properties and
to ensure that the ThreadLocal<T> does not become initialized if it was not already.
Constructs a new debugger view object for the provided ThreadLocal object.
A ThreadLocal object to browse in the debugger.
Returns whether the ThreadLocal object is initialized or not.
Returns the value of the ThreadLocal object.
Limits the number of threads that can access a resource or pool of resources concurrently.
The provides a lightweight semaphore class that doesn't
use Windows kernel semaphores.
All public and protected members of 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 have
completed.
Initializes a new instance of the class, specifying
the initial number of requests that can be granted concurrently.
The initial number of requests for the semaphore that can be granted
concurrently.
is less than 0.
Initializes a new instance of the class, specifying
the initial and maximum number of requests that can be granted concurrently.
The initial number of requests for the semaphore that can be granted
concurrently.
The maximum number of requests for the semaphore that can be granted
concurrently.
is less than 0. -or-
is greater than . -or-
is less than 0.
Blocks the current thread until it can enter the .
The current instance has already been
disposed.
Blocks the current thread until it can enter the , while observing a
.
The token to
observe.
was
canceled.
The current instance has already been
disposed.
Blocks the current thread until it can enter the , using a to measure the time interval.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
true if the current thread successfully entered the ;
otherwise, false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
Blocks the current thread until it can enter the , using a to measure the time interval, while observing a .
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
The to
observe.
true if the current thread successfully entered the ;
otherwise, false.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than .
was canceled.
Blocks the current thread until it can enter the , using a 32-bit
signed integer to measure the time interval.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if the current thread successfully entered the ;
otherwise, false.
is a
negative number other than -1, which represents an infinite time-out.
Blocks the current thread until it can enter the ,
using a 32-bit signed integer to measure the time interval,
while observing a .
The number of milliseconds to wait, or (-1) to
wait indefinitely.
The to observe.
true if the current thread successfully entered the ; otherwise, false.
is a negative number other than -1,
which represents an infinite time-out.
was canceled.
Local helper function, waits on the monitor until the monitor recieves signal or the
timeout is expired
The maximum timeout
The start ticks to calculate the elapsed time
The CancellationToken to observe.
true if the monitor recieved a signal, false if the timeout expired
Exits the once.
The previous count of the .
The current instance has already been
disposed.
Exits the a specified number of times.
The number of times to exit the semaphore.
The previous count of the .
is less
than 1.
The has
already reached its maximum size.
The current instance has already been
disposed.
Releases all resources used by the current instance of .
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
When overridden in a derived class, releases the unmanaged resources used by the
, and optionally releases the managed resources.
true to release both managed and unmanaged resources;
false to release only unmanaged resources.
Unlike most of the members of , is not
thread-safe and may not be used concurrently with other members of this instance.
Helper function to measure and update the wait time
The first time (in Ticks) observed when the wait started
The orginal wait timeoutout in milliseconds
The new wait time in milliseconds, -1 if the time expired
Private helper method to wake up waiters when a cancellationToken gets canceled.
Checks the dispose status by checking the lock object, if it is null means that object
has been disposed and throw ObjectDisposedException
local helper function to retrieve the exception string message from the resource file
The key string
Gets the current count of the .
The current count of the .
Returns a that can be used to wait on the semaphore.
A that can be used to wait on the
semaphore.
A successful wait on the does not imply a successful wait on
the itself, nor does it decrement the semaphore's
count. 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.
The has been disposed.
Provides support for spin-based waiting.
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.
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
. For most purposes where spin waiting is required, however,
the type should be preferred over the method.
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.
Performs a single spin.
This is typically called in a loop, and may change in behavior based on the number of times a
has been called thus far on this instance.
Resets the spin counter.
This makes and behave as though no calls
to had been issued on this instance. If a instance
is reused many times, it may be useful to reset it to avoid yielding too soon.
Spins until the specified condition is satisfied.
A delegate to be executed over and over until it returns true.
The argument is null.
Spins until the specified condition is satisfied or until the specified timeout is expired.
A delegate to be executed over and over until it returns true.
A that represents the number of milliseconds to wait,
or a TimeSpan that represents -1 milliseconds to wait indefinitely.
True if the condition is satisfied within the timeout; otherwise, false
The argument is null.
is a negative number
other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
.
Spins until the specified condition is satisfied or until the specified timeout is expired.
A delegate to be executed over and over until it returns true.
The number of milliseconds to wait, or (-1) to wait indefinitely.
True if the condition is satisfied within the timeout; otherwise, false
The argument is null.
is a
negative number other than -1, which represents an infinite time-out.
Gets the number of times has been called on this instance.
Gets whether the next call to will yield the processor, triggering a
forced context switch.
Whether the next call to will yield the processor, triggering a
forced context switch.
On a single-CPU machine, always yields the processor. On machines with
multiple CPUs, may yield after an unspecified number of calls.
A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval
Gets the number of available processors
Gets whether the current machine has only a single processor.
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.
Spin locks can be used for leaf-level locks where the object allocation implied by using a , 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.
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 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.
Do not store instances in readonly fields.
All members of are thread-safe and may be used from multiple threads
concurrently.
Initializes a new instance of the
structure with the option to track thread IDs to improve debugging.
The default constructor for tracks thread ownership.
Whether to capture and use thread IDs for debugging
purposes.
Initializes a new instance of the
structure with the option to track thread IDs to improve debugging.
The default constructor for tracks thread ownership.
Acquires the lock in a reliable manner, such that even if an exception occurs within the method
call, can be examined reliably to determine whether the lock was
acquired.
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 ), 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.
True if the lock is acquired; otherwise, false. must be initialized to false prior to calling this method.
Thread ownership tracking is enabled, and the current thread has already acquired this lock.
The argument must be initialized to false prior to calling Enter.
Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
the method call, can be examined reliably to determine whether the
lock was acquired.
Unlike , 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.
True if the lock is acquired; otherwise, false. must be initialized to false prior to calling this method.
Thread ownership tracking is enabled, and the current thread has already acquired this lock.
The argument must be initialized to false prior to calling TryEnter.
Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
the method call, can be examined reliably to determine whether the
lock was acquired.
Unlike , TryEnter will not block indefinitely waiting for the lock to be
available. It will block until either the lock is available or until the
has expired.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
True if the lock is acquired; otherwise, false. must be initialized to false prior to calling this method.
Thread ownership tracking is enabled, and the current thread has already acquired this lock.
The argument must be initialized to false prior to calling TryEnter.
is a negative
number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater
than milliseconds.
Attempts to acquire the lock in a reliable manner, such that even if an exception occurs within
the method call, can be examined reliably to determine whether the
lock was acquired.
Unlike , TryEnter will not block indefinitely waiting for the lock to be
available. It will block until either the lock is available or until the has expired.
The number of milliseconds to wait, or (-1) to wait indefinitely.
True if the lock is acquired; otherwise, false. must be initialized to false prior to calling this method.
Thread ownership tracking is enabled, and the current thread has already acquired this lock.
The argument must be initialized to false prior to calling TryEnter.
is
a negative number other than -1, which represents an infinite time-out.
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
The timeout milliseconds
The lockTaken param
decrements the waiters, in case of the timeout is expired
ContinueTryEnter for the thread tracking mode enabled
Helper function to validate the timeout
The start time in ticks
The orginal wait time
True if expired, false otherwise
Releases the lock.
The default overload of provides the same behavior as if calling using true as the argument.
Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
Releases the lock.
A Boolean value that indicates whether a memory fence should be issued in order to immediately
publish the exit operation to other threads.
Calling with the argument set to
true will improve the fairness of the lock at the expense of some performance. The default
overload behaves as if specifying true for .
Thread ownership tracking is enabled, and the current thread is not the owner of this lock.
Gets whether the lock is currently held by any thread.
Gets whether the lock is currently held by any thread.
Gets whether the lock is held by the current thread.
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.
Thread ownership tracking is disabled.
Gets whether thread ownership tracking is enabled for this instance.
Internal class used by debug type proxy attribute to display the owner thread ID
SystemThreading_SpinLockDebugView constructor
The SpinLock to be proxied.
Checks if the lock is held by the current thread or not
Gets the current owner thread, zero if it is released
Gets whether the lock is currently held by any thread or not.
Stores options that configure the operation of methods on the
Parallel class.
By default, methods on the Parallel class attempt to utilize all available processors, are non-cancelable, and target
the default TaskScheduler (TaskScheduler.Default). enables
overriding these defaults.
Initializes a new instance of the class.
This constructor initializes the instance with default values.
is initialized to -1, signifying that there is no upper bound set on how much parallelism should
be employed. is initialized to a non-cancelable token,
and is initialized to the default scheduler (TaskScheduler.Default).
All of these defaults may be overwritten using the property set accessors on the instance.
Gets or sets the TaskScheduler
associated with this instance. Setting this property to null
indicates that the current scheduler should be used.
Gets or sets the maximum degree of parallelism enabled by this ParallelOptions instance.
The limits the number of concurrent operations run by Parallel method calls that are passed this
ParallelOptions instance to the set value, if it is positive. If is -1, then there is no limit placed on the number of concurrently
running operations.
The exception that is thrown when this is set to 0 or some
value less than -1.
Gets or sets the CancellationToken
associated with this instance.
Providing a CancellationToken
to a Parallel 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
.
Provides support for parallel loops and regions.
The class provides library-based data parallel replacements
for common operations such as for loops, for each loops, and execution of a set of statements.
Executes each of the provided actions, possibly in parallel.
An array of Actions to execute.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null element.
The exception that is thrown when any
action in the array throws an exception.
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.
Executes each of the provided actions, possibly in parallel.
A ParallelOptions
instance that configures the behavior of this operation.
An array of Actions to execute.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null element.
The exception that is thrown when
the CancellationToken in the
is set.
The exception that is thrown when any
action in the array throws an exception.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
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.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState instance that may be
used to break out of the loop prematurely.
Calling ParallelLoopState.Break()
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.
If executing all iterations before the current one is not necessary,
ParallelLoopState.Stop()
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.
When a loop is ended prematurely, the that's returned will contain
relevant information about the loop's completion.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for loop in which iterations may run in parallel.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for loop in which iterations may run in parallel.
The type of the thread-local data.
The start index, inclusive.
The end index, exclusive.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for loop in which iterations may run in parallel. Supports 64-bit indices.
The type of the thread-local data.
The start index, inclusive.
The end index, exclusive.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for loop in which iterations may run in parallel.
The type of the thread-local data.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for loop in which iterations may run in parallel.
The type of the thread-local data.
The start index, inclusive.
The end index, exclusive.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The 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 ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
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.
The type of the local data.
The loop's start index, inclusive.
The loop's end index, exclusive.
A ParallelOptions instance.
The simple loop body.
The loop body for ParallelState overloads.
The loop body for thread local state overloads.
A selector function that returns new thread local state.
A cleanup function to destroy thread local state.
Only one of the body arguments may be supplied (i.e. they are exclusive).
A structure.
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.
The type of the local data.
The loop's start index, inclusive.
The loop's end index, exclusive.
A ParallelOptions instance.
The simple loop body.
The loop body for ParallelState overloads.
The loop body for thread local state overloads.
A selector function that returns new thread local state.
A cleanup function to destroy thread local state.
Only one of the body arguments may be supplied (i.e. they are exclusive).
A structure.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the current element as a parameter.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the current element as a parameter.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
and a ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
and a ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState instance that may be
used to break out of the loop prematurely, and the current element's index (an Int64).
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
An enumerable data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState instance that may be
used to break out of the loop prematurely, and the current element's index (an Int64).
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
The type of the thread-local data.
An enumerable data source.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
The type of the thread-local data.
An enumerable data source.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
The type of the thread-local data.
An enumerable data source.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on an
in which iterations may run in parallel.
The type of the data in the source.
The type of the thread-local data.
An enumerable data source.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The delegate is invoked once for each element in the
enumerable. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
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.
The type of the source data.
The type of the local data.
An enumerable data source.
ParallelOptions instance to use with this ForEach-loop
The simple loop body.
The loop body for ParallelState overloads.
The loop body for ParallelState/indexed overloads.
The loop body for ParallelState/thread local state overloads.
The loop body for ParallelState/indexed/thread local state overloads.
A selector function that returns new thread local state.
A cleanup function to destroy thread local state.
Only one of the bodyXX arguments may be supplied (i.e. they are exclusive).
A structure.
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.
The type of the source data.
The type of the local data.
An array data source.
The options to use for execution.
The simple loop body.
The loop body for ParallelState overloads.
The loop body for indexed/ParallelLoopState overloads.
The loop body for local/ParallelLoopState overloads.
The loop body for the most generic overload.
A selector function that returns new thread local state.
A cleanup function to destroy thread local state.
A structure.
A fast path for the more general ForEachWorker method above. This uses IList<T>'s indexer
capabilities to access the individual elements of the list rather than an enumerator.
The type of the source data.
The type of the local data.
A list data source.
The options to use for execution.
The simple loop body.
The loop body for ParallelState overloads.
The loop body for indexed/ParallelLoopState overloads.
The loop body for local/ParallelLoopState overloads.
The loop body for the most generic overload.
A selector function that returns new thread local state.
A cleanup function to destroy thread local state.
A structure.
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The Partitioner that contains the original data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the current element as a parameter.
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The Partitioner that contains the original data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
and a ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for each operation on a
OrderablePartitioner in which iterations may run in parallel.
The type of the elements in .
The OrderablePartitioner that contains the original data source.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
SupportsDynamicPartitions property in the OrderablePartitioner returns
false.
The exception that is thrown when the
KeysNormalized property in the OrderablePartitioner returns
false.
The exception that is thrown when any
methods in the OrderablePartitioner return null.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner do not return the correct number of partitions.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner return an IList with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the
OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState instance that may be
used to break out of the loop prematurely, and the current element's index (an Int64).
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The type of the thread-local data.
The Partitioner that contains the original data source.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on a
OrderablePartitioner in which iterations may run in parallel.
The type of the elements in .
The type of the thread-local data.
The OrderablePartitioner that contains the original data source.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
SupportsDynamicPartitions property in the OrderablePartitioner returns
false.
The exception that is thrown when the
KeysNormalized property in the OrderablePartitioner returns
false.
The exception that is thrown when any
methods in the OrderablePartitioner return null.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner do not return the correct number of partitions.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner return an IList with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the
OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The Partitioner that contains the original data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the current element as a parameter.
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The Partitioner that contains the original data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
and a ParallelLoopState instance that may be
used to break out of the loop prematurely.
Executes a for each operation on a
OrderablePartitioner in which iterations may run in parallel.
The type of the elements in .
The OrderablePartitioner that contains the original data source.
A ParallelOptions
instance that configures the behavior of this operation.
The delegate that is invoked once per iteration.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown when the
SupportsDynamicPartitions property in the OrderablePartitioner returns
false.
The exception that is thrown when the
KeysNormalized property in the OrderablePartitioner returns
false.
The exception that is thrown when any
methods in the OrderablePartitioner return null.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner do not return the correct number of partitions.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner return an IList with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the
OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState instance that may be
used to break out of the loop prematurely, and the current element's index (an Int64).
Executes a for each operation on a
Partitioner in which iterations may run in parallel.
The type of the elements in .
The type of the thread-local data.
The Partitioner that contains the original data source.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown when the
SupportsDynamicPartitions property in the Partitioner returns
false.
The exception that is thrown when any
methods in the Partitioner return null.
The exception that is thrown when the
GetPartitions() method in the Partitioner does not return
the correct number of partitions.
The exception that is thrown when the
GetPartitions() method in the Partitioner returns an IList
with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() method in the Partitioner returns an
IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
Executes a for each operation on a
OrderablePartitioner in which iterations may run in parallel.
The type of the elements in .
The type of the thread-local data.
The OrderablePartitioner that contains the original data source.
A ParallelOptions
instance that configures the behavior of this operation.
The function delegate that returns the initial state of the local data
for each thread.
The delegate that is invoked once per iteration.
The delegate that performs a final action on the local state of each
thread.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
CancellationToken in the
argument is set
The exception that is thrown when the
SupportsDynamicPartitions property in the OrderablePartitioner returns
false.
The exception that is thrown when the
KeysNormalized property in the OrderablePartitioner returns
false.
The exception that is thrown when any
methods in the OrderablePartitioner return null.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner do not return the correct number of partitions.
The exception that is thrown when the
GetPartitions() or GetOrderablePartitions() methods in the
OrderablePartitioner return an IList with at least one null value.
The exception that is thrown when the
GetDynamicPartitions() or GetDynamicOrderablePartitions() methods in the
OrderablePartitioner return an IEnumerable whose GetEnumerator() method returns null.
The exception that is thrown to contain an exception
thrown from one of the specified delegates.
The exception that is thrown when the
the CancellationTokenSource associated with the
the CancellationToken in the
has been disposed.
A ParallelLoopResult structure
that contains information on what portion of the loop completed.
The Partitioner 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
OrderablePartitioner.
The delegate is invoked once for each element in the
Partitioner. It is provided with the following parameters: the current element,
a ParallelLoopState 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.
The 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
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 delegate. The localFinally delegate is invoked once per thread to perform a final
action on each thread's local state.
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.
The exception collection to filter
The CancellationToken expected on all inner exceptions
Enables iterations of loops to interact with
other iterations.
Communicates that the loop should cease execution at the system's earliest
convenience.
The method was previously called. and may not be used in combination by iterations of the same loop.
may be used to communicate to the loop that no other iterations need be run.
For long-running iterations that may already be executing, causes
to return true for all other iterations of the loop, such that another iteration may check and exit early if it's observed to be true.
is typically employed in search-based algorithms, where once a result is found,
no other iterations need be executed.
Communicates that the loop should cease execution at the system's earliest
convenience of iterations beyond the current iteration.
The method was previously called. and
may not be used in combination by iterations of the same loop.
may be used to communicate to the loop that no other iterations after the
current iteration need be run. For example, if 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.
For long-running iterations that may already be executing, causes
to be set to the current iteration's index if the current index is less than the current value of
.
is typically employed in search-based algorithms where an ordering is
present in the data source.
Internal/virtual support for ShouldExitCurrentIteration.
Gets whether the current iteration of the loop should exit based
on requests made by this or other iterations.
When an iteration of a loop calls or , or
when one throws an exception, or when the loop is canceled, the 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 property and
cease execution if the property returns true.
Gets whether any iteration of the loop has called .
Gets whether any iteration of the loop has thrown an exception that went unhandled by that
iteration.
Internal/virtual support for LowestBreakIteration.
Gets the lowest iteration of the loop from which was called.
If no iteration of the loop called , this property will return null.
Internal constructor to ensure an instance isn't created by users.
A flag shared among all threads participating
in the execution of a certain loop.
Communicates that parallel tasks should stop when they reach a specified iteration element.
(which is CurrentIteration of the caller).
Break() called after Stop().
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.
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.
Returns true if we should be exiting from the current iteration
due to Stop(), Break() or exception.
Returns the lowest iteration at which Break() has been called, or
null if Break() has not yet been called.
Allows independent iterations of a parallel loop to interact with other iterations.
Internal constructor to ensure an instance isn't created by users.
A flag shared among all threads participating
in the execution of a certain loop.
Communicates that parallel tasks should stop when they reach a specified iteration element.
(which is CurrentIteration of the caller).
Break() called after Stop().
Atomically sets shared StoppedBroken flag to BROKEN, then atomically sets shared
LowestBreakIteration to CurrentIteration, but only if CurrentIteration is less than
LowestBreakIteration.
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.
Returns true if we should be exiting from the current iteration
due to Stop(), Break() or exception.
Returns the lowest iteration at which Break() has been called, or
null if Break() has not yet been called.
State information that is common between ParallelStateFlags class
and ParallelStateFlags64 class.
An internal class used to share accounting information in 32-bit versions
of For()/ForEach() loops.
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.
The caller's current iteration point
in the loop.
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.
An internal class used to share accounting information in 64-bit versions
of For()/ForEach() loops.
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.
The caller's current iteration point
in the loop.
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.
Provides completion status on the execution of a loop.
If returns true, then the loop ran to completion, such that all iterations
of the loop were executed. If returns false and returns null, a call to was used to end the loop prematurely. If returns false and returns a non-null integral
value, was used to end the loop prematurely.
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.
Gets the index of the lowest iteration from which
was called.
If was not employed, this property will
return null.
Utility class for allocating structs as heap variables
Represents an index range
The RangeWorker struct wraps the state needed by a task that services the parallel loop
Initializes a RangeWorker struct
Implements the core work search algorithm that will be used for this range worker.
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.
32 bit integer version of FindNewWork. Assumes the ranges were initialized with 32 bit values.
Represents the entire loop operation, keeping track of workers and ranges.
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
Initializes a RangeManager with the given loop parameters, and the desired number of outer ranges
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
Represents an asynchronous operation that produces a result at some time in the future.
The type of the result produced by this .
instances may be created in a variety of ways. The most common approach is by
using the task's property to retrieve a instance that can be used to create tasks for several
purposes. For example, to create a that runs a function, the factory's StartNew
method may be used:
// C#
var t = Task<int>.Factory.StartNew(() => GenerateResult());
- or -
var t = Task.Factory.StartNew(() => GenerateResult());
' Visual Basic
Dim t = Task<int>.Factory.StartNew(Function() GenerateResult())
- or -
Dim t = Task.Factory.StartNew(Function() GenerateResult())
The 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
Start
method may then be used to schedule the task for execution at a later time.
All members of , except for
Dispose, are thread-safe
and may be used from multiple threads concurrently.
Represents an asynchronous operation.
instances may be created in a variety of ways. The most common approach is by
using the Task type's property to retrieve a instance that can be used to create tasks for several
purposes. For example, to create a that runs an action, the factory's StartNew
method may be used:
// C#
var t = Task.Factory.StartNew(() => DoAction());
' Visual Basic
Dim t = Task.Factory.StartNew(Function() DoAction())
The 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
method may then be used to schedule the task for execution at a later time.
All members of , except for , are thread-safe
and may be used from multiple threads concurrently.
For operations that return values, the class
should be used.
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 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 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.
A type initializer that runs with the appropriate permissions.
Initializes a new with the specified action.
The delegate that represents the code to execute in the Task.
The argument is null.
Initializes a new with the specified action and CancellationToken.
The delegate that represents the code to execute in the Task.
The CancellationToken
that will be assigned to the new Task.
The argument is null.
The provided CancellationToken
has already been disposed.
Initializes a new with the specified action and creation options.
The delegate that represents the code to execute in the task.
The TaskCreationOptions used to
customize the Task's behavior.
The argument is null.
The argument specifies an invalid value for .
Initializes a new with the specified action and creation options.
The delegate that represents the code to execute in the task.
The that will be assigned to the new task.
The TaskCreationOptions used to
customize the Task's behavior.
The argument is null.
The argument specifies an invalid value for .
The provided CancellationToken
has already been disposed.
Initializes a new with the specified action and state.
The delegate that represents the code to execute in the task.
An object representing data to be used by the action.
The argument is null.
Initializes a new with the specified action, state, snd options.
The delegate that represents the code to execute in the task.
An object representing data to be used by the action.
The that will be assigned to the new task.
The argument is null.
The provided CancellationToken
has already been disposed.
Initializes a new with the specified action, state, snd options.
The delegate that represents the code to execute in the task.
An object representing data to be used by the action.
The TaskCreationOptions used to
customize the Task's behavior.
The argument is null.
The argument specifies an invalid value for .
Initializes a new with the specified action, state, snd options.
The delegate that represents the code to execute in the task.
An object representing data to be used by the action.
The that will be assigned to the new task.
The TaskCreationOptions used to
customize the Task's behavior.
The argument is null.
The argument specifies an invalid value for .
The provided CancellationToken
has already been disposed.
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.
An action to execute.
Optional state to pass to the action.
Parent of Task.
A CancellationToken for the task.
A task scheduler under which the task will run.
Options to control its execution.
Internal options to control its execution
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.
Action for task to execute.
Object to which to pass to action (may be null)
Task scheduler on which to run thread (only used by continuation tasks).
A CancellationToken for the Task.
Options to customize behavior of Task.
Internal options to customize behavior of Task.
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.
Captures the ExecutionContext so long as flow isn't suppressed.
A stack crawl mark pointing to the frame of the caller.
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.
Starts the , scheduling it for execution to the current TaskScheduler.
A task may only be started and run only once. Any attempts to schedule a task a second time
will result in an exception.
The 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.
The instance has been disposed.
Starts the , scheduling it for execution to the specified TaskScheduler.
A task may only be started and run only once. Any attempts to schedule a task a second time will
result in an exception.
The TaskScheduler with which to associate
and execute this task.
The argument is null.
The 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.
The instance has been disposed.
Runs the synchronously on the current TaskScheduler.
A task may only be started and run only once. Any attempts to schedule a task a second time will
result in an exception.
Tasks executed with will be associated with the current TaskScheduler.
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.
The 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.
The instance has been disposed.
Runs the synchronously on the scheduler provided.
A task may only be started and run only once. Any attempts to schedule a task a second time will
result in an exception.
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.
The 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.
The instance has been disposed.
The parameter
is null.
The scheduler on which to attempt to run this task inline.
Throws an exception if the task has been disposed, and hence can no longer be accessed.
The task has been disposed.
Sets the internal completion event.
Disposes the , releasing all of its unmanaged resources.
Unlike most of the members of , this method is not thread-safe.
Also, may only be called on a that is in one of
the final states: RanToCompletion,
Faulted, or
Canceled.
The exception that is thrown if the is not in
one of the final states: RanToCompletion,
Faulted, or
Canceled.
Disposes the , releasing all of its unmanaged resources.
A Boolean value that indicates whether this method is being called due to a call to .
Unlike most of the members of , this method is not thread-safe.
Schedules the task for execution.
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.
Adds an exception to the list of exceptions this task has thrown.
An object representing either an Exception or a collection of Exceptions.
Returns a list of exceptions by aggregating the holder's contents. Or null if
no exceptions have been thrown.
Whether to include a TCE if cancelled.
An aggregate exception, or null if no exceptions have been caught.
Throws an aggregate exception if the task contains exceptions.
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
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.
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.
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()
This is called by children of this task when they are completed.
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
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
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.
Whether the delegate was executed.
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.
The task has already been disposed.
IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it.
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.
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.
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.
The actual code which invokes the body of the task. This can be overriden in derived types.
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.
Performs whatever handling is necessary for an unhandled exception. Normally
this just entails adding the exception to the holder object.
The exception that went unhandled.
Waits for the to complete execution.
The was canceled -or- an exception was thrown during
the execution of the .
The has been disposed.
Waits for the to complete execution.
A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely.
true if the completed execution within the allotted time; otherwise, false.
The was canceled -or- an exception was thrown during the execution of the .
is a negative number other than -1 milliseconds, which represents an
infinite time-out -or- timeout is greater than
.
The has been disposed.
Waits for the to complete execution.
A to observe while waiting for the task to complete.
The was canceled.
The was canceled -or- an exception was thrown during the execution of the .
The
has been disposed.
Waits for the to complete execution.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
true if the completed execution within the allotted time; otherwise,
false.
is a negative number other than -1, which represents an
infinite time-out.
The was canceled -or- an exception was thrown during the execution of the .
The
has been disposed.
Waits for the to complete execution.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
A to observe while waiting for the task to complete.
true if the completed execution within the allotted time; otherwise, false.
The was canceled -or- an exception was thrown during the execution of the .
The
has been disposed.
is a negative number other than -1, which represents an
infinite time-out.
The was canceled.
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.
Cancels the .
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.
true if the task was successfully canceled; otherwise, false.
The
has been disposed.
Sets the task's cancellation acknowledged flag.
Runs all of the continuations, as appropriate.
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.
The continuation options under evaluation.
True if the continuation should be run given the task's current state.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new continuation task.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The to associate with the continuation task and to use for its execution.
A new continuation .
The returned 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.
The argument is null.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled
instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
The that will be assigned to the new continuation task.
The to associate with the continuation task and to use for its
execution.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the criteria specified through the parameter
are not met, the continuation task will be canceled instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new continuation task.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The to associate with the continuation task and to use for its execution.
A new continuation .
The returned 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.
The argument is null.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled
instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new continuation task.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
The to associate with the continuation task and to use for its
execution.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the criteria specified through the parameter
are not met, the continuation task will be canceled instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Converts TaskContinuationOptions to TaskCreationOptions, and also does
some validity checking along the way.
Incoming TaskContinuationOptions
Outgoing TaskCreationOptions
Outgoing InternalTaskOptions
Registers the continuation and possibly runs it (if the task is already finished).
The continuation task itself.
TaskScheduler with which to associate continuation task.
Restrictions on when the continuation becomes active.
Waits for all of the provided objects to complete execution.
An array of instances on which to wait.
The argument is null.
The argument contains a null element.
At least one of the instances was canceled -or- an exception was thrown during
the execution of at least one of the instances.
The has been disposed.
Waits for all of the provided objects to complete execution.
true if all of the instances completed execution within the allotted time;
otherwise, false.
An array of instances on which to wait.
A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely.
The argument is null.
The argument contains a null element.
At least one of the instances was canceled -or- an exception was thrown during
the execution of at least one of the instances.
is a negative number other than -1 milliseconds, which represents an
infinite time-out -or- timeout is greater than
.
The has been disposed.
Waits for all of the provided objects to complete execution.
true if all of the instances completed execution within the allotted time;
otherwise, false.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
An array of instances on which to wait.
The argument is null.
The argument contains a null element.
At least one of the instances was canceled -or- an exception was thrown during
the execution of at least one of the instances.
The has been disposed.
is a negative number other than -1, which represents an
infinite time-out.
Waits for all of the provided objects to complete execution.
true if all of the instances completed execution within the allotted time;
otherwise, false.
An array of instances on which to wait.
A to observe while waiting for the tasks to complete.
The argument is null.
The argument contains a null element.
At least one of the instances was canceled -or- an exception was thrown during
the execution of at least one of the instances.
The was canceled.
The has been disposed.
Waits for all of the provided objects to complete execution.
true if all of the instances completed execution within the allotted time;
otherwise, false.
An array of instances on which to wait.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
A to observe while waiting for the tasks to complete.
The argument is null.
The argument contains a null element.
At least one of the instances was canceled -or- an exception was thrown during
the execution of at least one of the instances.
The has been disposed.
is a negative number other than -1, which represents an
infinite time-out.
The was canceled.
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.
An array of wait handles to wait on.
The timeout to use during waits.
The cancellationToken that enables a wait to be canceled.
True if all waits succeeded, false if a timeout occurred.
Internal WaitAll implementation which is meant to be used with small number of tasks,
optimized for Parallel.Invoke and other structured primitives.
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).
Waits for any of the provided objects to complete execution.
An array of instances on which to wait.
The index of the completed task in the array argument.
The argument is null.
The argument contains a null element.
The has been disposed.
Waits for any of the provided objects to complete execution.
An array of instances on which to wait.
A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely.
The index of the completed task in the array argument, or -1 if the
timeout occurred.
The argument is null.
The argument contains a null element.
The has been disposed.
is a negative number other than -1 milliseconds, which represents an
infinite time-out -or- timeout is greater than
.
Waits for any of the provided objects to complete execution.
An array of instances on which to wait.
A to observe while waiting for a task to complete.
The index of the completed task in the array argument.
The argument is null.
The argument contains a null element.
The has been disposed.
The was canceled.
Waits for any of the provided objects to complete execution.
An array of instances on which to wait.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
The index of the completed task in the array argument, or -1 if the
timeout occurred.
The argument is null.
The argument contains a null element.
The has been disposed.
is a negative number other than -1, which represents an
infinite time-out.
Waits for any of the provided objects to complete execution.
An array of instances on which to wait.
The number of milliseconds to wait, or (-1) to
wait indefinitely.
A to observe while waiting for a task to complete.
The index of the completed task in the array argument, or -1 if the
timeout occurred.
The argument is null.
The argument contains a null element.
The has been disposed.
is a negative number other than -1, which represents an
infinite time-out.
The was canceled.
Gets a unique ID for this Task instance.
Task IDs are assigned on-demand and do not necessarily represent the order in the which Task
instances were created.
Returns the unique ID of the currently executing Task.
Gets the Task instance currently executing, or
null if none exists.
Gets the StackGuard object assigned to the current thread.
Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any
exceptions, this will return null.
Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a
in calls to Wait
or in accesses to the property. Any exceptions not observed by the time
the Task instance is garbage collected will be propagated on the finalizer thread.
The Task
has been disposed.
Gets the TaskStatus of this Task.
Gets whether this Task instance has completed
execution due to being canceled.
A Task will complete in Canceled state either if its CancellationToken
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
OperationCanceledException that bears the same
CancellationToken.
Returns true if this task has a cancellation token and it was signaled.
To be used internally in execute entry codepaths.
This internal property provides access to the CancellationToken that was set on the task
when it was constructed.
Gets whether this threw an OperationCanceledException while its CancellationToken was signaled.
Gets whether this Task has completed.
will return true when the Task is in one of the three
final states: RanToCompletion,
Faulted, or
Canceled.
Checks whether this task has been disposed.
Gets the TaskCreationOptions used
to create this task.
Gets a that can be used to wait for the task to
complete.
Using the wait functionality provided by
should be preferred over using for similar
functionality.
The has been disposed.
Gets the state object supplied when the Task was created,
or null if none was supplied.
Gets an indication of whether the asynchronous operation completed synchronously.
true if the asynchronous operation completed synchronously; otherwise, false.
Provides access to the TaskScheduler responsible for executing this Task.
Provides access to factory methods for creating and instances.
The factory returned from is a default instance
of , as would result from using
the default constructor on TaskFactory.
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.
Determines whether this is the root task of a self replicating group.
Determines whether the task is a replica itself.
The property formerly known as IsFaulted.
Gets whether the completed due to an unhandled exception.
If is true, the Task's will be equal to
TaskStatus.Faulted, and its
property will be non-null.
Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set,
This will only be used by the implicit wait to prevent double throws
Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task.
A structure to hold continuation information.
Constructs a new continuation structure.
The task to be activated.
The continuation options.
The scheduler to use for the continuation.
Invokes the continuation for the target completion task.
The completed task.
Whether the continuation can be inlined.
Initializes a new with the specified function.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
The argument is null.
Initializes a new with the specified function.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
The to be assigned to this task.
The argument is null.
The provided CancellationToken
has already been disposed.
Initializes a new with the specified function and creation options.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
The TaskCreationOptions used to
customize the task's behavior.
The argument is null.
The argument specifies an invalid value for .
Initializes a new with the specified function and creation options.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
The that will be assigned to the new task.
The TaskCreationOptions used to
customize the task's behavior.
The argument is null.
The argument specifies an invalid value for .
The provided CancellationToken
has already been disposed.
Initializes a new with the specified function and state.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
An object representing data to be used by the action.
The argument is null.
Initializes a new with the specified action, state, and options.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
An object representing data to be used by the function.
The to be assigned to the new task.
The argument is null.
The provided CancellationToken
has already been disposed.
Initializes a new with the specified action, state, and options.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
An object representing data to be used by the function.
The TaskCreationOptions used to
customize the task's behavior.
The argument is null.
The argument specifies an invalid value for .
Initializes a new with the specified action, state, and options.
The delegate that represents the code to execute in the task. When the function has completed,
the task's property will be set to return the result value of the function.
An object representing data to be used by the function.
The to be assigned to the new task.
The TaskCreationOptions used to
customize the task's behavior.
The argument is null.
The argument specifies an invalid value for .
The provided CancellationToken
has already been disposed.
Creates a new future object.
The parent task for this future.
A function that yields the future value.
The task scheduler which will be used to execute the future.
The CancellationToken for the task.
Options to control the future's behavior.
Internal options to control the future's behavior.
The argument specifies
a SelfReplicating , which is illegal."/>.
Creates a new future object.
The parent task for this future.
An object containing data to be used by the action; may be null.
A function that yields the future value.
The CancellationToken for the task.
The task scheduler which will be used to execute the future.
Options to control the future's behavior.
Internal options to control the future's behavior.
The argument specifies
a SelfReplicating , which is illegal."/>.
Evaluates the value selector of the Task which is passed in as an object and stores the result.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new continuation task.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The to associate with the continuation task and to use for its execution.
A new continuation .
The returned 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.
The argument is null.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled
instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The has been disposed.
Creates a continuation that executes when the target completes.
An action to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new continuation task.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
The to associate with the continuation task and to use for its
execution.
A new continuation .
The returned will not be scheduled for execution until the current task has
completed. If the criteria specified through the parameter
are not met, the continuation task will be canceled instead of scheduled.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The that will be assigned to the new task.
A new continuation .
The returned 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.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
The to associate with the continuation task and to use for its execution.
A new continuation .
The returned 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.
The argument is null.
The argument is null.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be
passed the completed task as an argument.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
A new continuation .
The returned 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.
The , when executed, should return a . This task's completion state will be transferred to the task returned
from the ContinueWith call.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The has been disposed.
Creates a continuation that executes when the target completes.
The type of the result produced by the continuation.
A function to run when the completes. When run, the delegate will be passed as
an argument this completed task.
The that will be assigned to the new task.
Options for when the continuation is scheduled and how it behaves. This includes criteria, such
as OnlyOnCanceled, as
well as execution options, such as ExecuteSynchronously.
The to associate with the continuation task and to use for its
execution.
A new continuation .
The returned 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.
The , when executed, should return a .
This task's completion state will be transferred to the task returned from the
ContinueWith call.
The argument is null.
The argument specifies an invalid value for TaskContinuationOptions.
The argument is null.
The has been disposed.
The provided CancellationToken
has already been disposed.
Gets the result value of this .
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 .
Provides access to factory methods for creating instances.
The factory returned from is a default instance
of , as would result from using
the default constructor on the factory type.
Provides support for creating and scheduling
Task{TResult} objects.
The type of the results that are available though
the Task{TResult} objects that are associated with
the methods in this class.
There are many common patterns for which tasks are relevant. The
class encodes some of these patterns into methods that pick up default settings, which are
configurable through its constructors.
A default instance of is available through the
Task{TResult}.Factory property.
Initializes a instance with the default configuration.
This constructor creates a instance with a default configuration. The
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the default configuration.
The default that will be assigned
to tasks created by this unless another CancellationToken is explicitly specified
while calling the factory methods.
This constructor creates a instance with a default configuration. The
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The
TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value
indicates that the current TaskScheduler should be used.
With this constructor, the
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to , unless it's null, in which case the property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The default
TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}.
The default
TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}.
The exception that is thrown when the
argument or the
argument specifies an invalid value.
With this constructor, the
property is initialized to ,
the
property is initialized to , and the TaskScheduler property is initialized to the
current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The default that will be assigned
to tasks created by this unless another CancellationToken is explicitly specified
while calling the factory methods.
The default
TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}.
The default
TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}.
The default
TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value
indicates that TaskScheduler.Current should be used.
The exception that is thrown when the
argument or the
argumentspecifies an invalid value.
With this constructor, the
property is initialized to ,
the
property is initialized to , and the TaskScheduler property is initialized to
, unless it's null, in which case the property is initialized to the
current scheduler (see TaskScheduler.Current).
Creates and starts a .
A function delegate that returns the future result to be available through
the .
The started .
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
The that will be assigned to the new task.
The started .
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
A TaskCreationOptions value that controls the behavior of the
created
.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
A TaskCreationOptions value that controls the behavior of the
created
.
The that will be assigned to the new task.
The TaskScheduler
that is used to schedule the created
Task{TResult}.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The started .
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The that will be assigned to the new task.
The started .
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
A TaskCreationOptions value that controls the behavior of the
created
.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The that will be assigned to the new task.
A TaskCreationOptions value that controls the behavior of the
created
.
The TaskScheduler
that is used to schedule the created
Task{TResult}.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
A Task that represents the
asynchronous operation.
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the
asynchronous operation.
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The TaskScheduler
that is used to schedule the task that executes the end method.
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the
asynchronous operation.
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The function delegate to execute when all tasks in
the array have completed.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The function delegate to execute when all tasks in
the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The function delegate to execute when all tasks in the array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The function delegate to execute when all tasks in the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the array completes.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Gets the default CancellationToken of this
TaskFactory.
This property returns the default 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.
Gets the TaskScheduler of this
TaskFactory{TResult}.
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, TaskScheduler.Current
will be used.
Gets the TaskCreationOptions
value of this TaskFactory{TResult}.
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.
Gets the TaskContinuationOptions
value of this TaskFactory{TResult}.
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.
Represents the current stage in the lifecycle of a .
The task has been initialized but has not yet been scheduled.
The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure.
The task has been scheduled for execution but has not yet begun executing.
The task is running but has not yet completed.
The task has finished executing and is implicitly waiting for
attached child tasks to complete.
The task completed execution successfully.
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.
The task completed due to an unhandled exception.
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.
Specifies flags that control optional behavior for the creation and execution of tasks.
Specifies that the default behavior should be used.
A hint to a TaskScheduler 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.
Specifies that a task will be a long-running, course-grained operation. It provides a hint to the
TaskScheduler that oversubscription may be
warranted.
Specifies that a task is attached to a parent in the task hierarchy.
Task creation flags which are only used internally.
Specifies "No internal task options"
Used to filter out internal vs. public task creation options.
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.
Specifies flags that control optional behavior for the creation and execution of continuation tasks.
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 TaskStatus.
A hint to a TaskScheduler 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.
Specifies that a task will be a long-running, course-grained operation. It provides
a hint to the TaskScheduler that
oversubscription may be warranted.
Specifies that a task is attached to a parent in the task hierarchy.
Specifies that the continuation task should not be scheduled if its antecedent ran to completion.
This option is not valid for multi-task continuations.
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.
Specifies that the continuation task should not be scheduled if its antecedent was canceled. This
option is not valid for multi-task continuations.
Specifies that the continuation task should be scheduled only if its antecedent ran to
completion. This option is not valid for multi-task continuations.
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.
Specifies that the continuation task should be scheduled only if its antecedent was canceled.
This option is not valid for multi-task continuations.
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.
Internal helper class to keep track of stack depth and decide whether we should inline or not.
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.
This needs to be called once for each previous successful TryBeginInliningScope() call after
inlining related logic runs.
Represents an exception used to communicate task cancellation.
Initializes a new instance of the class.
Initializes a new instance of the
class with a specified error message.
The error message that explains the reason for the exception.
Initializes a new instance of the
class with a specified error message and a reference to the inner exception that is the cause of
this exception.
The error message that explains the reason for the exception.
The exception that is the cause of the current exception.
Initializes a new instance of the class
with a reference to the that has been canceled.
A task that has been canceled.
Initializes a new instance of the
class with serialized data.
The that holds the serialized object data about the exception being thrown.
The that contains contextual information about the source or destination.
Gets the task associated with this exception.
It is permissible for no Task to be associated with a
, in which case
this property will return null.
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).
Creates a new holder; it will be registered for finalization.
The task this holder belongs to.
A finalizer that repropagates unhandled exceptions.
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.
An exception object (either an Exception or an
IEnumerable{Exception}) to add to the list.
A private helper method that ensures the holder is considered
unhandled, i.e. it is registered for finalization.
A private helper method that ensures the holder is considered
handled, i.e. it is not registered for finalization.
Whether this is called from the finalizer thread.
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.
Whether this is being called from a finalizer.
An extra exception to be included (optionally).
The aggregate exception to throw.
Provides support for creating and scheduling
Tasks.
There are many common patterns for which tasks are relevant. The
class encodes some of these patterns into methods that pick up default settings, which are
configurable through its constructors.
A default instance of is available through the
Task.Factory property.
Initializes a instance with the default configuration.
This constructor creates a instance with a default configuration. The
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The default that will be assigned
to tasks created by this unless another CancellationToken is explicitly specified
while calling the factory methods.
This constructor creates a instance with a default configuration. The
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The
TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value
indicates that the current TaskScheduler should be used.
With this constructor, the
property is initialized to
TaskCreationOptions.None, the
property is initialized to TaskContinuationOptions.None,
and the TaskScheduler property is
initialized to , unless it's null, in which case the property is
initialized to the current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The default
TaskCreationOptions to use when creating tasks with this TaskFactory.
The default
TaskContinuationOptions to use when creating continuation tasks with this TaskFactory.
The exception that is thrown when the
argument or the
argument specifies an invalid value.
With this constructor, the
property is initialized to ,
the
property is initialized to , and the TaskScheduler property is initialized to the
current scheduler (see TaskScheduler.Current).
Initializes a instance with the specified configuration.
The default that will be assigned
to tasks created by this unless another CancellationToken is explicitly specified
while calling the factory methods.
The default
TaskCreationOptions to use when creating tasks with this TaskFactory.
The default
TaskContinuationOptions to use when creating continuation tasks with this TaskFactory.
The default
TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value
indicates that TaskScheduler.Current should be used.
The exception that is thrown when the
argument or the
argumentspecifies an invalid value.
With this constructor, the
property is initialized to ,
the
property is initialized to , and the TaskScheduler property is initialized to
, unless it's null, in which case the property is initialized to the
current scheduler (see TaskScheduler.Current).
Creates and starts a Task.
The action delegate to execute asynchronously.
The started Task.
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors
and then calling
Start to schedule it for execution. However,
unless creation and scheduling must be separated, StartNew is the recommended
approach for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
The that will be assigned to the new task.
The started Task.
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors
and then calling
Start to schedule it for execution. However,
unless creation and scheduling must be separated, StartNew is the recommended
approach for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
A TaskCreationOptions value that controls the behavior of the
created
Task.
The started Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
The that will be assigned to the new
A TaskCreationOptions value that controls the behavior of the
created
Task.
The TaskScheduler
that is used to schedule the created Task.
The started Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
An object containing data to be used by the
delegate.
The started Task.
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
An object containing data to be used by the
delegate.
The that will be assigned to the new
The started Task.
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
An object containing data to be used by the
delegate.
A TaskCreationOptions value that controls the behavior of the
created
Task.
The started Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a Task.
The action delegate to execute asynchronously.
An object containing data to be used by the
delegate.
The that will be assigned to the new task.
A TaskCreationOptions value that controls the behavior of the
created
Task.
The TaskScheduler
that is used to schedule the created Task.
The started Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a Task using one of its constructors and
then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
The started .
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
The that will be assigned to the new
The started .
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
A TaskCreationOptions value that controls the behavior of the
created
.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
The that will be assigned to the new task.
A TaskCreationOptions value that controls the behavior of the
created
.
The TaskScheduler
that is used to schedule the created
Task{TResult}.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The started .
The exception that is thrown when the
argument is null.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The that will be assigned to the new
The started .
The exception that is thrown when the
argument is null.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
A TaskCreationOptions value that controls the behavior of the
created
.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates and starts a .
The type of the result available through the
Task.
A function delegate that returns the future result to be available through
the .
An object containing data to be used by the
delegate.
The that will be assigned to the new task.
A TaskCreationOptions value that controls the behavior of the
created
.
The TaskScheduler
that is used to schedule the created
Task{TResult}.
The started .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The provided CancellationToken
has already been disposed.
Calling StartNew is functionally equivalent to creating a using one
of its constructors and then calling
Start to schedule it for execution.
However, unless creation and scheduling must be separated, StartNew is the recommended approach
for both simplicity and performance.
Creates a Task that executes an end method action
when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The action delegate that processes the completed .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
A Task that represents the asynchronous
operation.
Creates a Task that executes an end method action
when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The action delegate that processes the completed .
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the asynchronous
operation.
Creates a Task that executes an end method action
when a specified IAsyncResult completes.
The IAsyncResult whose completion should trigger the processing of the
.
The action delegate that processes the completed .
The TaskScheduler
that is used to schedule the task that executes the end method.
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the asynchronous
operation.
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The type of the second argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The type of the second argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of begin
and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the
delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that represents the
asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The type of the result available through the
Task.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
A Task that represents the
asynchronous operation.
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The type of the result available through the
Task.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the
asynchronous operation.
Creates a Task that executes an end
method function when a specified IAsyncResult completes.
The type of the result available through the
Task.
The IAsyncResult whose completion should trigger the processing of the
.
The function delegate that processes the completed .
The TaskScheduler
that is used to schedule the task that executes the end method.
The TaskCreationOptions value that controls the behavior of the
created Task.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
A Task that represents the
asynchronous operation.
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Creates a Task that represents a pair of
begin and end methods that conform to the Asynchronous Programming Model pattern.
The type of the first argument passed to the delegate.
The type of the second argument passed to
delegate.
The type of the third argument passed to
delegate.
The type of the result available through the
Task.
The delegate that begins the asynchronous operation.
The delegate that ends the asynchronous operation.
The first argument passed to the
delegate.
The second argument passed to the
delegate.
The third argument passed to the
delegate.
The TaskCreationOptions value that controls the behavior of the
created Task.
An object containing data to be used by the
delegate.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument specifies an invalid TaskCreationOptions
value.
The created Task that
represents the asynchronous operation.
This method throws any exceptions thrown by the .
Check validity of options passed to FromAsync method
The options to be validated.
determines type of FromAsync method that called this method
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The action delegate to execute when all tasks in
the array have completed.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The action delegate to execute when all tasks in
the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The action delegate to execute when all tasks in the array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The array of tasks from which to continue.
The action delegate to execute when all tasks in the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The action delegate to execute when all tasks in
the array have completed.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The action delegate to execute when all tasks in
the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The action delegate to execute when all tasks in the array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result of the antecedent .
The array of tasks from which to continue.
The action delegate to execute when all tasks in the array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of a set of provided Tasks.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue.
The function delegate to execute when all tasks in the
array have completed.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAll.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the array completes.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation Task.
The new continuation Task.
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result that is returned by the
delegate and associated with the created .
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The function delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the
array completes.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the
array completes.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Creates a continuation Task
that will be started upon the completion of any Task in the provided set.
The type of the result of the antecedent .
The array of tasks from which to continue when one task completes.
The action delegate to execute when one task in the
array completes.
The CancellationToken
that will be assigned to the new continuation task.
The
TaskContinuationOptions value that controls the behavior of
the created continuation Task.
The TaskScheduler
that is used to schedule the created continuation .
The new continuation .
The exception that is thrown when the
array is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
argument is null.
The exception that is thrown when the
array contains a null value.
The exception that is thrown when the
array is empty.
The exception that is thrown when the
argument specifies an invalid TaskContinuationOptions
value.
The exception that is thrown when one
of the elements in the array has been disposed.
The provided CancellationToken
has already been disposed.
The NotOn* and OnlyOn* TaskContinuationOptions,
which constrain for which TaskStatus states a continuation
will be executed, are illegal with ContinueWhenAny.
Gets the default CancellationToken of this
TaskFactory.
This property returns the default 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.
Gets the TaskScheduler of this
TaskFactory.
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, TaskScheduler.Current
will be used.
Gets the TaskCreationOptions
value of this TaskFactory.
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.
Gets the TaskContinuationOptions
value of this TaskFactory.
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.
Represents the producer side of a unbound to a
delegate, providing access to the consumer side through the property.
It is often the case that a is desired to
represent another asynchronous operation.
TaskCompletionSource 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.
All members of are thread-safe
and may be used from multiple threads concurrently.
The type of the result value assocatied with this .
Creates a .
Creates a
with the specified options.
The created
by this instance and accessible through its property
will be instantiated using the specified .
The options to use when creating the underlying
.
The represent options invalid for use
with a .
Creates a
with the specified state.
The state to use as the underlying
's AsyncState.
Creates a with
the specified state and options.
The options to use when creating the underlying
.
The state to use as the underlying
's AsyncState.
The represent options invalid for use
with a .
Attempts to transition the underlying
into the
Faulted
state.
The exception to bind to this .
True if the operation was successful; otherwise, false.
This operation will return false if the
is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The argument is null.
The was disposed.
Attempts to transition the underlying
into the
Faulted
state.
The collection of exceptions to bind to this .
True if the operation was successful; otherwise, false.
This operation will return false if the
is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The argument is null.
There are one or more null elements in .
The collection is empty.
The was disposed.
Transitions the underlying
into the
Faulted
state.
The exception to bind to this .
The argument is null.
The underlying is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Transitions the underlying
into the
Faulted
state.
The collection of exceptions to bind to this .
The argument is null.
There are one or more null elements in .
The underlying is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Attempts to transition the underlying
into the
RanToCompletion
state.
The result value to bind to this .
True if the operation was successful; otherwise, false.
This operation will return false if the
is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Transitions the underlying
into the
RanToCompletion
state.
The result value to bind to this .
The underlying is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Transitions the underlying
into the
Canceled
state.
The underlying is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Attempts to transition the underlying
into the
Canceled
state.
True if the operation was successful; otherwise, false.
This operation will return false if the
is already in one
of the three final states:
RanToCompletion,
Faulted, or
Canceled.
The was disposed.
Gets the created
by this .
This property enables a consumer access to the that is controlled by this instance.
The , ,
, and
methods (and their "Try" variants) on this instance all result in the relevant state
transitions on this underlying Task.
Represents an abstract scheduler for tasks.
TaskScheduler 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.
All members of the abstract type are thread-safe
and may be used from multiple threads concurrently.
Queues a Task to the scheduler.
A class derived from TaskScheduler
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.
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.
The Task to be queued.
The argument is null.
Determines whether the provided Task
can be executed synchronously in this call, and if it can, executes it.
A class derived from TaskScheduler 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.
If a scheduler decides to perform the inline execution, it should do so by calling to the base
TaskScheduler's
TryExecuteTask 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 method.
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.
The Task to be
executed.
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.
A Boolean value indicating whether the task was executed inline.
The argument is
null.
The was already
executed.
Generates an enumerable of Task instances
currently queued to the scheduler waiting to be executed.
A class derived from 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.
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
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.
The returned enumerable should never be null. If there are currently no queued tasks, an empty
enumerable should be returned instead.
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:
internal Task[] GetScheduledTasksForDebugger(). 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: internal static TaskScheduler[] GetTaskSchedulersForDebugger().
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.
An enumerable that allows traversal of tasks currently queued to this scheduler.
This scheduler is unable to generate a list of queued tasks at this time.
Retrieves some thread static state that can be cached and passed to multiple
TryRunInline calls, avoiding superflous TLS fetches.
A bag of TLS state (or null if none exists).
Attempts to execute the target task synchronously.
The task to run.
True if the task may have been previously queued,
false if the task was absolutely not previously queued.
The state retrieved from GetThreadStatics
True if it ran, false otherwise.
Attempts to dequeue a Task that was previously queued to
this scheduler.
The Task to be dequeued.
A Boolean denoting whether the argument was successfully dequeued.
The argument is null.
Notifies the scheduler that a work item has made progress.
Initializes the .
Frees all resources associated with this scheduler.
Creates a
associated with the current .
All Task instances queued to
the returned scheduler will be executed through a call to the
Post method
on that context.
A associated with
the current SynchronizationContext, as
determined by SynchronizationContext.Current.
The current SynchronizationContext may not be used as a TaskScheduler.
Attempts to execute the provided Task
on this scheduler.
Scheduler implementations are provided with Task
instances to be executed through either the method or the
method. When the scheduler deems it appropriate to run the
provided 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.
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.
A Task object to be executed.
The is not associated with this scheduler.
A Boolean that is true if 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.
Provides an array of all queued Task instances
for the debugger.
The returned array is populated through a call to .
Note that this function is only meant to be invoked by a debugger remotely.
It should not be called by any other codepaths.
An array of Task instances.
This scheduler is unable to generate a list of queued tasks at this time.
Provides an array of all active TaskScheduler
instances for the debugger.
This function is only meant to be invoked by a debugger remotely.
It should not be called by any other codepaths.
An array of TaskScheduler instances.
Registers a new TaskScheduler instance in the global collection of schedulers.
Removes a TaskScheduler instance from the global collection of schedulers.
Indicates the maximum concurrency level this
is able to support.
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.
Gets the default TaskScheduler instance.
Gets the TaskScheduler
associated with the currently executing task.
When not called from within a task, will return the scheduler.
Gets the unique ID for this .
Occurs when a faulted 's unobserved exception is about to trigger exception escalation
policy, which, by default, would terminate the process.
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
instance, which may be used to examine the exception and to mark it as observed.
Nested class that provides debugger view for TaskScheduler
A TaskScheduler implementation that executes all tasks queued to it through a call to
on the
that its associated with. The default constructor for this class binds to the current
Constructs a SynchronizationContextTaskScheduler associated with
This constructor expects to be set.
Implemetation of for this scheduler class.
Simply posts the tasks to be executed on the associated .
Implementation of for this scheduler class.
The task will be executed inline only if the call happens within
the associated .
Implementes the property for
this scheduler class.
By default it returns 1, because a based
scheduler only supports execution on a single thread.
Provides data for the event that is raised when a faulted 's
exception goes unobserved.
The Exception property is used to examine the exception without marking it
as observed, whereas the 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.
Initializes a new instance of the class
with the unobserved exception.
The Exception that has gone unobserved.
Marks the as "observed," thus preventing it
from triggering exception escalation policy which, by default, terminates the process.
Gets whether this exception has been marked as "observed."
The Exception that went unobserved.
An implementation of TaskScheduler that uses the ThreadPool scheduler
Constructs a new ThreadPool task scheduler object
Schedules a task to the ThreadPool.
The task to schedule.
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.
Notifies the scheduler that work is progressing (no-op).
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.
Represents an exception used to communicate an invalid operation by a
.
Initializes a new instance of the class.
Initializes a new instance of the
class with a specified error message.
The error message that explains the reason for the exception.
Initializes a new instance of the
class using the default error message and a reference to the inner exception that is the cause of
this exception.
The exception that is the cause of the current exception.
Initializes a new instance of the
class with a specified error message and a reference to the inner exception that is the cause of
this exception.
The error message that explains the reason for the exception.
The exception that is the cause of the current exception.
Initializes a new instance of the
class with serialized data.
The that holds
the serialized object data about the exception being thrown.
The that
contains contextual information about the source or destination.
The exception that is thrown when the post-phase action of a fails.
Initializes a new instance of the class.
Initializes a new instance of the class with the specified inner exception.
The exception that is the cause of the current exception.
Initializes a new instance of the class with a specified error message.
A string that describes the exception.
Initializes a new instance of the class with a specified error message and inner exception.
A string that describes the exception.
The exception that is the cause of the current exception.
Initializes a new instance of the class with serialized data.
The object that holds the serialized object data.
An object that describes the source or destination of the serialized data.
Enables multiple tasks to cooperatively work on an algorithm in parallel through multiple phases.
A group of tasks cooperate by moving through a series of phases, where each in the group signals it
has arrived at the in a given phase and implicitly waits for all others to
arrive. The same can be used for multiple phases.
All public and protected members of 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 have
completed.
Initializes a new instance of the class.
The number of participating threads.
is less than 0
or greater than .
Initializes a new instance of the class.
The number of participating threads.
The to be executed after each
phase.
is less than 0
or greater than .
The 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.
Extract the three variables current, total and sense from a given big variable
The integer variable that contains the other three variables
The current cparticipant count
The total participants count
The sense flag
Write the three variables current. total and the sense to the m_currentTotal
The old current total to compare
The current cparticipant count
The total participants count
The sense flag
True if the CAS succeeded, false otherwise
Notifies the that there will be an additional participant.
The phase number of the barrier in which the new participants will first
participate.
Adding a participant would cause the barrier's participant count to
exceed .
The method was invoked from within a post-phase action.
The current instance has already been
disposed.
Notifies the that there will be additional participants.
The number of additional participants to add to the
barrier.
The phase number of the barrier in which the new participants will first
participate.
is less than
0.
Adding participants would cause the
barrier's participant count to exceed .
The method was invoked from within a post-phase action.
The current instance has already been
disposed.
Notifies the that there will be one less participant.
The barrier already has 0
participants.
The method was invoked from within a post-phase action.
The current instance has already been
disposed.
Notifies the that there will be fewer participants.
The number of additional participants to remove from the barrier.
is less than
0.
The barrier already has 0 participants.
The method was invoked from within a post-phase action.
The current instance has already been
disposed.
Signals that a participant has reached the and waits for all other
participants to reach the barrier as well.
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.
The current instance has already been
disposed.
Signals that a participant has reached the and waits for all other
participants to reach the barrier, while observing a .
The to
observe.
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.
has been
canceled.
The current instance has already been
disposed.
Signals that a participant has reached the and waits for all other
participants to reach the barrier as well, using a
to measure the time interval.
A that represents the number of
milliseconds to wait, or a that represents -1 milliseconds to
wait indefinitely.
true if all other participants reached the barrier; otherwise, false.
is a negative number
other than -1 milliseconds, which represents an infinite time-out, or it is greater than
.
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.
The current instance has already been
disposed.
Signals that a participant has reached the and waits for all other
participants to reach the barrier as well, using a
to measure the time interval, while observing a .
A that represents the number of
milliseconds to wait, or a that represents -1 milliseconds to
wait indefinitely.
The to
observe.
true if all other participants reached the barrier; otherwise, false.
is a negative number
other than -1 milliseconds, which represents an infinite time-out.
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.
has been
canceled.
The current instance has already been
disposed.
Signals that a participant has reached the and waits for all other
participants to reach the barrier as well, using a
32-bit signed integer to measure the time interval.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if all other participants reached the barrier; otherwise, false.
is a
negative number other than -1, which represents an infinite time-out.
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.
The current instance has already been
disposed.
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 .
The number of milliseconds to wait, or (-1) to wait indefinitely.
The to
observe.
true if all other participants reached the barrier; otherwise, false.
is a
negative number other than -1, which represents an infinite time-out.
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.
has been
canceled.
The current instance has already been
disposed.
Finish the phase by invoking the post phase action, and setting the event, this must be called by the
last arrival thread
The current phase sense
Sets the current phase event and reset the next phase event
The current phase sense
Releases all resources used by the current instance of .
The method was invoked from within a post-phase action.
Unlike most of the members of , Dispose is not thread-safe and may not be
used concurrently with other members of this instance.
When overridden in a derived class, releases the unmanaged resources used by the
, and optionally releases the managed resources.
true to release both managed and unmanaged resources; false to release
only unmanaged resources.
Unlike most of the members of , Dispose is not thread-safe and may not be
used concurrently with other members of this instance.
Throw ObjectDisposedException if the barrier is disposed
Gets the number of participants in the barrier that haven’t yet signaled
in the current phase.
This could be 0 during a post-phase action delegate execution or if the
ParticipantCount is 0.
Gets the total number of participants in the barrier.
Gets the number of the barrier's current phase.
Provides blocking and bounding capabilities for thread-safe collections that
implement .
represents a collection
that allows for thread-safe adding and removing of data.
is used as a wrapper
for an instance, allowing
removal attempts from the collection to block until data is available to be removed. Similarly,
a can be created to enforce
an upper-bound on the number of data elements allowed in the
; addition attempts to the
collection may then block until space is available to store the added items. In this manner,
is similar to a traditional
blocking queue data structure, except that the underlying data storage mechanism is abstracted
away as an .
Specifies the type of elements in the collection.
Initializes a new instance of the
class without an upper-bound.
The default underlying collection is a ConcurrentQueue<T>.
Initializes a new instance of the
class with the specified upper-bound.
The bounded size of the collection.
The is
not a positive value.
The default underlying collection is a ConcurrentQueue<T>.
Initializes a new instance of the
class with the specified upper-bound and using the provided
as its underlying data store.
The collection to use as the underlying data store.
The bounded size of the collection.
The argument is
null.
The is not a positive value.
The supplied contains more values
than is permitted by .
Initializes a new instance of the
class without an upper-bound and using the provided
as its underlying data store.
The collection to use as the underlying data store.
The argument is
null.
Initializes the BlockingCollection instance.
The collection to use as the underlying data store.
The bounded size of the collection.
The number of items currently in the underlying collection.
Adds the item to the .
The item to be added to the collection. The value can be a null reference.
The has been marked
as complete with regards to additions.
The has been disposed.
The underlying collection didn't accept the item.
If a bounded capacity was specified when this instance of
was initialized,
a call to Add may block until space is available to store the provided item.
Adds the item to the .
A is thrown if the is
canceled.
The item to be added to the collection. The value can be a null reference.
A cancellation token to observe.
If the is canceled.
The has been marked
as complete with regards to additions.
The has been disposed.
The underlying collection didn't accept the item.
If a bounded capacity was specified when this instance of
was initialized,
a call to may block until space is available to store the provided item.
Attempts to add the specified item to the .
The item to be added to the collection.
true if the could be added; otherwise, false.
The has been marked
as complete with regards to additions.
The has been disposed.
The underlying collection didn't accept the item.
Attempts to add the specified item to the .
The item to be added to the collection.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
true if the could be added to the collection within
the alloted time; otherwise, false.
The has been marked
as complete with regards to additions.
The has been disposed.
is a negative number
other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
.
The underlying collection didn't accept the item.
Attempts to add the specified item to the .
The item to be added to the collection.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if the could be added to the collection within
the alloted time; otherwise, false.
The has been marked
as complete with regards to additions.
The has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
The underlying collection didn't accept the item.
Attempts to add the specified item to the .
A is thrown if the is
canceled.
The item to be added to the collection.
The number of milliseconds to wait, or (-1) to wait indefinitely.
A cancellation token to observe.
true if the could be added to the collection within
the alloted time; otherwise, false.
If the is canceled.
The has been marked
as complete with regards to additions.
The has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
The underlying collection didn't accept the item.
Adds an item into the underlying data store using its IProducerConsumerCollection<T>.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.
The item to be added to the collection.
The number of milliseconds to wait for the collection to accept the item,
or Timeout.Infinite to wait indefinitely.
A cancellation token to observe.
False if the collection remained full till the timeout period was exhausted.True otherwise.
If the is canceled.
the collection has already been marked
as complete with regards to additions.
If the collection has been disposed.
The underlying collection didn't accept the item.
Takes an item from the .
The item removed from the collection.
The is empty and has been marked
as complete with regards to additions.
The has been disposed.
The underlying collection was modified
outside of this instance.
A call to may block until an item is available to be removed.
Takes an item from the .
The item removed from the collection.
If the is
canceled or the is empty and has been marked
as complete with regards to additions.
The has been disposed.
The underlying collection was modified
outside of this instance.
A call to may block until an item is available to be removed.
Attempts to remove an item from the .
The item removed from the collection.
true if an item could be removed; otherwise, false.
The has been disposed.
The underlying collection was modified
outside of this instance.
Attempts to remove an item from the .
The item removed from the collection.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
true if an item could be removed from the collection within
the alloted time; otherwise, false.
The has been disposed.
is a negative number
other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
.
The underlying collection was modified
outside of this instance.
Attempts to remove an item from the .
The item removed from the collection.
The number of milliseconds to wait, or (-1) to wait indefinitely.
true if an item could be removed from the collection within
the alloted time; otherwise, false.
The has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
The underlying collection was modified
outside of this instance.
Attempts to remove an item from the .
A is thrown if the is
canceled.
The item removed from the collection.
The number of milliseconds to wait, or (-1) to wait indefinitely.
A cancellation token to observe.
true if an item could be removed from the collection within
the alloted time; otherwise, false.
If the is canceled.
The has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
The underlying collection was modified
outside of this instance.
Takes an item from the underlying data store using its IProducerConsumerCollection<T>.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 is thrown if the is
canceled.
The item removed from the collection.
The number of milliseconds to wait for the collection to have an item available
for removal, or Timeout.Infinite to wait indefinitely.
A cancellation token to observe.
A combined cancellation token if created, it is only created by GetConsumingEnumerable to avoid creating the linked token
multiple times.
False if the collection remained empty till the timeout period was exhausted. True otherwise.
If the is canceled.
If the collection has been disposed.
Adds the specified item to any one of the specified
instances.
The array of collections.
The item to be added to one of the collections.
The index of the collection in the array to which the item was added.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
If a bounded capacity was specified when all of the
instances were initialized,
a call to AddToAny may block until space is available in one of the collections
to store the provided item.
Adds the specified item to any one of the specified
instances.
A is thrown if the is
canceled.
The array of collections.
The item to be added to one of the collections.
A cancellation token to observe.
The index of the collection in the array to which the item was added.
If the is canceled.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
If a bounded capacity was specified when all of the
instances were initialized,
a call to AddToAny may block until space is available in one of the collections
to store the provided item.
Attempts to add the specified item to any one of the specified
instances.
The array of collections.
The item to be added to one of the collections.
The index of the collection in the
array to which the item was added, or -1 if the item could not be added.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
Attempts to add the specified item to any one of the specified
instances.
The array of collections.
The item to be added to one of the collections.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
The index of the collection in the
array to which the item was added, or -1 if the item could not be added.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
is a negative number
other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
Attempts to add the specified item to any one of the specified
instances.
The array of collections.
The item to be added to one of the collections.
The number of milliseconds to wait, or (-1) to wait indefinitely. /// The index of the collection in the
array to which the item was added, or -1 if the item could not be added.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
Attempts to add the specified item to any one of the specified
instances.
A is thrown if the is
canceled.
The array of collections.
The item to be added to one of the collections.
The number of milliseconds to wait, or (-1) to wait indefinitely. /// The index of the collection in the
array to which the item was added, or -1 if the item could not be added.
A cancellation token to observe.
If the is canceled.
The argument is
null.
The argument is
a 0-length array or contains a null element, or at least one of collections has been
marked as complete for adding.
At least one of the instances has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
At least one underlying collection didn't accept the item.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
Adds/Takes an item to/from anyone of the specified collections.
A is thrown if the is
canceled.
The collections into which the item can be added.
The item to be added or the item removed and returned to the caller.
The number of milliseconds to wait for a collection to accept the
operation, or -1 to wait indefinitely.
Indicates whether this method is called to Add or Take.
A cancellation token to observe.
The index into collections for the collection which accepted the
adding/removal of the item; -1 if the item could not be added/removed.
If the is canceled.
If the collections argument is null.
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.
If atleast one of the collections has been disposed.
Local static method, used by TryAddTakeAny to get the wait handles for the collection, with exclude option to exclude the Compeleted collections
The blocking collections
Add or Take operation
The original CancellationToken
True to exclude the compeleted collections
Complete list of cancellationTokens to observe
The collections wait handles
Helper to perform WaitHandle.WaitAny(.., CancellationToken)
this should eventually appear on the WaitHandle class.
Helper function to measure and update the wait time
The first time (in Ticks) observed when the wait started
The orginal wait timeoutout in milliseconds
The new wait time in milliseconds, -1 if the time expired
Takes an item from any one of the specified
instances.
The array of collections.
The item removed from one of the collections.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
The argument is
null.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TakeFromAny may block until an item is available to be removed.
Takes an item from any one of the specified
instances.
A is thrown if the is
canceled.
The array of collections.
The item removed from one of the collections.
A cancellation token to observe.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
The argument is
null.
If the is canceled.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TakeFromAny may block until an item is available to be removed.
Attempts to remove an item from any one of the specified
instances.
The array of collections.
The item removed from one of the collections.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
The argument is
null.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TryTakeFromAny may block until an item is available to be removed.
Attempts to remove an item from any one of the specified
instances.
The array of collections.
The item removed from one of the collections.
A that represents the number of milliseconds
to wait, or a that represents -1 milliseconds to wait indefinitely.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
The argument is
null.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
is a negative number
other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than
.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TryTakeFromAny may block until an item is available to be removed.
Attempts to remove an item from any one of the specified
instances.
The array of collections.
The item removed from one of the collections.
The number of milliseconds to wait, or (-1) to wait indefinitely.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
The argument is
null.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TryTakeFromAny may block until an item is available to be removed.
Attempts to remove an item from any one of the specified
instances.
A is thrown if the is
canceled.
The array of collections.
The item removed from one of the collections.
The number of milliseconds to wait, or (-1) to wait indefinitely.
A cancellation token to observe.
The index of the collection in the array from which
the item was removed, or -1 if an item could not be removed.
If the is canceled.
The argument is
null.
The argument is
a 0-length array or contains a null element.
At least one of the instances has been disposed.
is a
negative number other than -1, which represents an infinite time-out.
At least one of the underlying collections was modified
outside of its instance.
The count of is greater than the maximum size of
62 for STA and 63 for MTA.
A call to TryTakeFromAny may block until an item is available to be removed.
Marks the instances
as not accepting any more additions.
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.
The has been disposed.
Cancels the semaphores.
Releases resources used by the instance.
Releases resources used by the instance.
Whether being disposed explicitly (true) or due to a finalizer (false).
Copies the items from the instance into a new array.
An array containing copies of the elements of the collection.
The has been disposed.
The copied elements are not removed from the collection.
Copies all of the items in the instance
to a compatible one-dimensional array, starting at the specified index of the target array.
The one-dimensional array that is the destination of the elements copied from
the instance. The array must have zero-based indexing.
The zero-based index in at which copying begins.
The argument is
null.
The argument is less than zero.
The argument is equal to or greater
than the length of the .
The has been disposed.
Copies all of the items in the instance
to a compatible one-dimensional array, starting at the specified index of the target array.
The one-dimensional array that is the destination of the elements copied from
the instance. The array must have zero-based indexing.
The zero-based index in at which copying begins.
The argument is
null.
The argument is less than zero.
The argument is equal to or greater
than the length of the , the array is multidimensional, or the type parameter for the collection
cannot be cast automatically to the type of the destination array.
The has been disposed.
Provides a consuming for items in the collection.
An that removes and returns items from the collection.
The has been disposed.
Provides a consuming for items in the collection.
Calling MoveNext on the returned enumerable will block if there is no data available, or will
throw an if the is canceled.
A cancellation token to observe.
An that removes and returns items from the collection.
The has been disposed.
If the is canceled.
Provides an for items in the collection.
An for the items in the collection.
The has been disposed.
Provides an for items in the collection.
An for the items in the collection.
The has been disposed.
Centralizes the logic for validating the BlockingCollections array passed to TryAddToAny()
and TryTakeFromAny().
The collections to/from which an item should be added/removed.
Indicates whether this method is called to Add or Take.
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.
If the collections argument is null.
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.
If atleast one of the collections has been disposed.
Centeralizes the logic of validating the timeout input argument.
The TimeSpan to wait for to successfully complete an operation on the collection.
If the number of millseconds represented by the timeout
TimeSpan is less than 0 or is larger than Int32.MaxValue and not Timeout.Infinite
Centralizes the logic of validating the millisecondsTimeout input argument.
The number of milliseconds to wait for to successfully complete an
operation on the collection.
If the number of millseconds is less than 0 and not
equal to Timeout.Infinite.
Throws a System.ObjectDisposedException if the collection was disposed
If the collection has been disposed.
Gets the bounded capacity of this instance.
The bounded capacity of this collection, or int.MaxValue if no bound was supplied.
The has been disposed.
Gets whether this has been marked as complete for adding.
Whether this collection has been marked as complete for adding.
The has been disposed.
Gets whether this has been marked as complete for adding and is empty.
Whether this collection has been marked as complete for adding and is empty.
The has been disposed.
Gets the number of items contained in the .
The number of items contained in the .
The has been disposed.
Gets a value indicating whether access to the is synchronized.
The has been disposed.
Gets an object that can be used to synchronize access to the . This property is not supported.
The SyncRoot property is not supported.
An enumerated data type used internal to the class to specify to a generic method
the current mode of operation.
A debugger view of the blocking collection that makes it simple to browse the
collection's contents at a point in time.
The type of element that the BlockingCollection will hold.
Constructs a new debugger view object for the provided blocking collection object.
A blocking collection to browse in the debugger.
Returns a snapshot of the underlying collection's elements.
Represents an thread-safe, unordered collection of objects.
Specifies the type of elements in the bag.
Bags are useful for storing objects when ordering doesn't matter, and unlike sets, bags support
duplicates. is a thread-safe bag implementation, optimized for
scenarios where the same thread will be both producing and consuming data stored in the bag.
accepts null reference (Nothing in Visual Basic) as a valid
value for reference types.
All public and protected members of are thread-safe and may be used
concurrently from multiple threads.
Initializes a new instance of the
class.
Initializes a new instance of the
class that contains elements copied from the specified collection.
The collection whose elements are copied to the new .
is a null reference
(Nothing in Visual Basic).
Local helper function to initalize a new bag object
An enumeration containing items with which to initialize this bag.
Adds an object to the .
The object to be added to the
. The value can be a null reference
(Nothing in Visual Basic) for reference types.
Attempts to add an object to the .
The object to be added to the
. The value can be a null reference
(Nothing in Visual Basic) for reference types.
Always returns true
Attempts to remove and return an object from the .
When this method returns, contains the object
removed from the or the default value
of if the operation failed.
true if an object was removed successfully; otherwise, false.
Attempts to return an object from the
without removing it.
When this method returns, contains an object from
the or the default value of
if the operation failed.
true if and object was returned successfully; otherwise, false.
Local helper function to Take or Peek an item from the bag
To receive the item retrieved from the bag
True means Take operation, false means Peek operation
True if succeeded, false otherwise
Local helper function to retrieve a thread local list by a thread object
Create a new list if the thread does ot exist
The local list object
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.
The list object, null if all lists are owned
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
To receive the item retrieved from the bag
Whether to remove or peek.
True if succeeded, false otherwise.
local helper function tries to steal an item from given local list
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
The list to steal
True if can steal, false otherwise
Copies the elements to an existing
one-dimensional Array, starting at the specified array
index.
The one-dimensional Array that is the
destination of the elements copied from the
. The Array must have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is equal to or greater than the
length of the
-or- the number of elements in the source is greater than the available space from
to the end of the destination .
Copies the elements of the to an , starting at a particular
index.
The one-dimensional Array that is the
destination of the elements copied from the
. The Array must have zero-based indexing.
The zero-based index in at which copying
begins.
is a null reference (Nothing in
Visual Basic).
is less than
zero.
is multidimensional. -or-
does not have zero-based indexing. -or-
is equal to or greater than the length of the
-or- The number of elements in the source is
greater than the available space from to the end of the destination
. -or- The type of the source cannot be cast automatically to the type of the
destination .
Copies the elements to a new array.
A new array containing a snapshot of elements copied from the .
Returns an enumerator that iterates through the .
An enumerator for the contents of the .
The enumeration represents a moment-in-time snapshot of the contents
of the bag. It does not reflect any updates to the collection after
was called. The enumerator is safe to use
concurrently with reads from and writes to the bag.
Returns an enumerator that iterates through the .
An enumerator for the contents of the .
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
was called.
Get the data array to be serialized
Construct the stack from a previously seiralized one
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
Retrieve the lock taken result for the global lock, to be passed to Unfreeze method
Local helper method to unfreeze the bag from a frozen state
The lock taken result from the Freeze method
local helper method to acquire all local lists locks
Local helper method to release all local lists locks
Local helper function to wait all unsynchronized operations
Local helper function to get the bag count, the caller should call it from Freeze/Unfreeze block
The current bag count
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
List the contains the bag items
Gets the number of elements contained in the .
The number of elements contained in the .
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
was called.
Gets a value that indicates whether the is empty.
true if the is empty; otherwise, false.
Gets a value indicating whether access to the is
synchronized with the SyncRoot.
true if access to the is synchronized
with the SyncRoot; otherwise, false. For , this property always
returns false.
Gets an object that can be used to synchronize access to the . This property is not supported.
The SyncRoot property is not supported.
A class that represents a node in the lock thread list
A class that represents the lock thread list
ThreadLocalList constructor
The owner thread for this list
Add new item to head of the list
The item to add.
Whether to update the count.
Remove an item from the head of the list
The removed item
Peek an item from the head of the list
the peeked item
True if succeeded, false otherwise
Steal an item from the tail of the list
the removed item
remove or peek flag
Gets the total list count, it's not thread safe, may provide incorrect count if it is called concurrently
List operations
A simple class for the debugger view window
Provides a set of methods for querying objects that implement
ParallelQuery{TSource}. This is the parallel equivalent of
.
Enables parallelization of a query.
The type of elements of .
An
to convert to a .
The source as a to bind to
ParallelEnumerable extension methods.
is a null reference (Nothing in Visual Basic).
Enables parallelization of a query, as sourced by a partitioner
responsible for splitting the input sequence into partitions.
The type of elements of .
A partitioner over the input sequence.
The as a ParallelQuery to bind to ParallelEnumerable extension methods.
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.
is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The input sequence.
Thrown if is not one of AsParallel, ParallelEnumerable.Range, or ParallelEnumerable.Repeat.
is a null reference (Nothing in Visual Basic).
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.
The source sequence which will maintain ordering in the query.
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.
The input sequence.
Thrown if the is not one of AsParallel, ParallelEnumerable.Range, or ParallelEnumerable.Repeat.
is a null reference (Nothing in Visual Basic).
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.
The source sequence which will maintain ordering in the query.
Allows an intermediate query to be treated as if no ordering is implied among the elements.
AsUnordered may provide
performance benefits when ordering is not required in a portion of a query.
The type of elements of .
The input sequence.
The source sequence with arbitrary order.
is a null reference (Nothing in Visual Basic).
Enables parallelization of a query.
An to convert
to a .
The source as a ParallelQuery to bind to
ParallelEnumerable extension methods.
is a null reference (Nothing in Visual Basic).
Converts a into an
to force sequential
evaluation of the query.
The type of elements of .
A to convert to an .
The source as an
to bind to sequential extension methods.
is a null reference (Nothing in Visual Basic).
Sets the task scheduler to execute the query.
The type of elements of .
A ParallelQuery on which to set the task scheduler option.
Task scheduler to execute the query.
ParallelQuery representing the same query as source, but with the task scheduler option set.
or is a null reference (Nothing in Visual Basic).
WithTaskScheduler is used multiple times in the query.
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.
The type of elements of .
A ParallelQuery on which to set the limit on the degrees of parallelism.
The degree of parallelism for the query.
ParallelQuery representing the same query as source, with the limit on the degrees of parallelism set.
is a null reference (Nothing in Visual Basic).
WithDegreeOfParallelism is used multiple times in the query.
is less than 1 or greater than 63.
Sets the to associate with the query.
The type of elements of .
A ParallelQuery on which to set the option.
A cancellation token.
ParallelQuery representing the same query as source, but with the
registered.
is a null reference (Nothing in Visual Basic).
WithCancellation is used multiple times in the query.
The associated with the has been disposed.
Sets the execution mode of the query.
The type of elements of .
A ParallelQuery on which to set the option.
The mode in which to execute the query.
ParallelQuery representing the same query as source, but with the
registered.
is a null reference (Nothing in Visual Basic).
is not a valid value.
WithExecutionMode is used multiple times in the query.
Sets the merge options for this query, which specify how the query will buffer output.
The type of elements of .
A ParallelQuery on which to set the option.
The merge optiosn to set for this query.
ParallelQuery representing the same query as source, but with the
registered.
is a null reference (Nothing in Visual Basic).
is not a valid value.
WithMergeOptions is used multiple times in the query.
Generates a parallel sequence of integral numbers within a specified range.
The value of the first integer in the sequence.
The number of sequential integers to generate.
An IEnumerable<Int32> in C# or IEnumerable(Of Int32) in
Visual Basic that contains a range of sequential integral numbers.
is less than 0
-or-
+ - 1 is larger than .
Generates a parallel sequence that contains one repeated value.
The type of the value to be repeated in the result sequence.
The value to be repeated.
The number of times to repeat the value in the generated sequence.
A sequence that contains a repeated value.
is less than 0.
Returns an empty ParallelQuery{TResult} that has the specified type argument.
The type to assign to the type parameter of the returned
generic sequence.
An empty sequence whose type argument is .
Invokes in parallel the specified action for each element in the .
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.
The type of elements of .
The whose elements will be processed by
.
An Action to invoke on each element.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Filters in parallel a sequence of values based on a predicate.
The type of the elements of source.
A sequence to filter.
A function to test each element for a condition.
A sequence that contains elements from the input sequence that satisfy
the condition.
or is a null reference (Nothing in Visual Basic).
Filters in parallel a sequence of values based on a predicate. Each element's index is used in the logic of the predicate function.
The type of the elements of source.
A sequence to filter.
A function to test each element for a condition.
A sequence that contains elements from the input sequence that satisfy the condition.
or is a null reference (Nothing in Visual Basic).
Projects in parallel each element of a sequence into a new form.
The type of the elements of .
The type of elements resturned by selector.
A sequence of values to invoke a transform function on.
A transform function to apply to each element.
A sequence whose elements are the result of invoking the transform function on each
element of .
or is a null reference (Nothing in Visual Basic).
Projects in parallel each element of a sequence into a new form by incorporating the element's index.
The type of the elements of .
The type of elements resturned by selector.
A sequence of values to invoke a transform function on.
A transform function to apply to each element.
A sequence whose elements are the result of invoking the transform function on each
element of .
or is a null reference (Nothing in Visual Basic).
Merges in parallel two sequences by using the specified predicate function.
The type of the elements of the first sequence.
The type of the elements of the second sequence.
The type of the return elements.
The first sequence to zip.
The second sequence to zip.
A function to create a result element from two matching elements.
A sequence that has elements of type 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.
or or is a null reference (Nothing in Visual Basic).
This Zip overload should never be called.
This method is marked as obsolete and always throws
when invoked.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Zip with a left data source of type
and a right data source of type .
Otherwise, the Zip operator would appear to be bind to the parallel implementation, but would in reality bind to the sequential implementation.
Correlates in parallel the elements of two sequences based on matching keys.
The default equality comparer is used to compare keys.
The type of the elements of the first sequence.
The type of the elements of the second sequence.
The type of the keys returned by the key selector functions.
The type of the result elements.
The first sequence to join.
The sequence to join to the first sequence.
A function to extract the join key from each element of
the first sequence.
A function to extract the join key from each element of
the second sequence.
A function to create a result element from two matching elements.
A sequence that has elements of type that are obtained by performing
an inner join on two sequences.
or or or
or is a null reference (Nothing in Visual Basic).
This Join overload should never be called.
This method is marked as obsolete and always throws when invoked.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage Join with a left data source of type
and a right data source of type .
Otherwise, the Join operator would appear to be binding to the parallel implementation, but would in reality bind to the sequential implementation.
Correlates in parallel the elements of two sequences based on matching keys.
A specified IEqualityComparer{T} is used to compare keys.
The type of the elements of the first sequence.
The type of the elements of the second sequence.
The type of the keys returned by the key selector functions.
The type of the result elements.
The first sequence to join.
The sequence to join to the first sequence.
A function to extract the join key from each element
of the first sequence.
A function to extract the join key from each element
of the second sequence.
A function to create a result element from two matching elements.
An IEqualityComparer<(Of <(T>)>) to hash and compare keys.
A sequence that has elements of type that are obtained by performing
an inner join on two sequences.
or or or
or is a null reference (Nothing in Visual Basic).
This Join overload should never be called.
This method is marked as obsolete and always throws when invoked.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Join with a left data source of type
and a right data source of type .
Otherwise, the Join operator would appear to be binding to the parallel implementation, but would in reality bind to the sequential implementation.
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.
The type of the elements of the first sequence.
The type of the elements of the second sequence.
The type of the keys returned by the key selector functions.
The type of the result elements.
The first sequence to join.
The sequence to join to the first sequence.
A function to extract the join key from each element
of the first sequence.
A function to extract the join key from each element
of the second sequence.
A function to create a result element from an element from
the first sequence and a collection of matching elements from the second sequence.
A sequence that has elements of type that are obtained by performing
a grouped join on two sequences.
or or or
or is a null reference (Nothing in Visual Basic).
This GroupJoin overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of GroupJoin with a left data source of type
and a right data source of type .
Otherwise, the GroupJoin operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
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.
The type of the elements of the first sequence.
The type of the elements of the second sequence.
The type of the keys returned by the key selector functions.
The type of the result elements.
The first sequence to join.
The sequence to join to the first sequence.
A function to extract the join key from each element
of the first sequence.
A function to extract the join key from each element
of the second sequence.
A function to create a result element from an element from
the first sequence and a collection of matching elements from the second sequence.
An IEqualityComparer<(Of <(T>)>) to hash and compare keys.
A sequence that has elements of type that are obtained by performing
a grouped join on two sequences.
or or or
or is a null reference (Nothing in Visual Basic).
This GroupJoin overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of GroupJoin with a left data source of type
and a right data source of type .
Otherwise, the GroupJoin operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Projects in parallel each element of a sequence to an IEnumerable{T}
and flattens the resulting sequences into one sequence.
The type of elements of .
The type of the elements of the sequence returned by selector.
A sequence of values to project.
A transform function to apply to each element.
A sequence whose elements are the result of invoking the one-to-many transform
function on each element of the input sequence.
or is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The type of the elements of the sequence returned by selector.
A sequence of values to project.
A transform function to apply to each element.
A sequence whose elements are the result of invoking the one-to-many transform
function on each element of the input sequence.
or is a null reference (Nothing in Visual Basic).
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 type of elements of .
The type of the intermediate elements collected by .
A sequence of values to project.
A transform function to apply to each source element;
the second parameter of the function represents the index of the source element.
A function to create a result element from an element from
the first sequence and a collection of matching elements from the second sequence.
A sequence whose elements are the result of invoking the one-to-many transform
function on each element of and then mapping
each of those sequence elements and their corresponding source element to a result element.
or or
is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The type of the intermediate elements collected by
.
The type of elements to return.
A sequence of values to project.
A transform function to apply to each source element;
the second parameter of the function represents the index of the source element.
A function to create a result element from an element from
the first sequence and a collection of matching elements from the second sequence.
A sequence whose elements are the result of invoking the one-to-many transform
function on each element of and then mapping
each of those sequence elements and their corresponding source element to a
result element.
or or
is a null reference (Nothing in Visual Basic).
Sorts in parallel the elements of a sequence in ascending order according to a key.
In contrast to the sequential implementation, this is not a stable sort.
To achieve a stable sort, change a query of the form:
var ordered = source.OrderBy((e) => e.k);
to instead be formed as:
var ordered = source.Select((e,i) => new { E=e, I=i }).OrderBy((v) => v.i).Select((v) => v.e);
The type of elements of .
The type of the key returned by .
A sequence of values to order.
A function to extract a key from an element.
An OrderedParallelQuery{TSource} whose elements are sorted
according to a key.
or is a null reference (Nothing in Visual Basic).
Sorts in parallel the elements of a sequence in ascending order by using a specified comparer.
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.
The type of elements of .
The type of the key returned by .
A sequence of values to order.
A function to extract a key from an element.
An IComparer{TKey} to compare keys.
An OrderedParallelQuery{TSource} whose elements are sorted according
to a key.
or is a null reference (Nothing in Visual Basic).
Sorts in parallel the elements of a sequence in descending order according to a key.
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.
The type of elements of .
The type of the key returned by .
A sequence of values to order.
A function to extract a key from an element.
An OrderedParallelQuery{TSource} whose elements are sorted
descending according to a key.
or is a null reference (Nothing in Visual Basic).
Sorts the elements of a sequence in descending order by using a specified comparer.
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.
The type of elements of .
The type of the key returned by .
A sequence of values to order.
A function to extract a key from an element.
An IComparer{TKey} to compare keys.
An OrderedParallelQuery{TSource} whose elements are sorted descending
according to a key.
or is a null reference (Nothing in Visual Basic).
Performs in parallel a subsequent ordering of the elements in a sequence
in ascending order according to a key.
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.
The type of elements of .
The type of the key returned by .
An OrderedParallelQuery{TSource} than
contains elements to sort.
A function to extract a key from an element.
An OrderedParallelQuery{TSource} whose elements are
sorted according to a key.
or is a null reference (Nothing in Visual Basic).
Performs in parallel a subsequent ordering of the elements in a sequence in
ascending order by using a specified comparer.
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.
The type of elements of .
The type of the key returned by .
An OrderedParallelQuery{TSource} that contains
elements to sort.
A function to extract a key from an element.
An IComparer{TKey} to compare keys.
An OrderedParallelQuery{TSource} whose elements are sorted
according to a key.
or is a null reference (Nothing in Visual Basic).
Performs in parallel a subsequent ordering of the elements in a sequence in
descending order, according to a key.
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.
The type of elements of .
The type of the key returned by .
An OrderedParallelQuery{TSource} than contains
elements to sort.
A function to extract a key from an element.
An OrderedParallelQuery{TSource} whose elements are sorted
descending according to a key.
or is a null reference (Nothing in Visual Basic).
Performs in parallel a subsequent ordering of the elements in a sequence in descending
order by using a specified comparer.
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.
The type of elements of .
The type of the key returned by .
An OrderedParallelQuery{TSource} than contains
elements to sort.
A function to extract a key from an element.
An IComparer{TKey} to compare keys.
An OrderedParallelQuery{TSource} whose elements are sorted
descending according to a key.
or is a null reference (Nothing in Visual Basic).
Groups in parallel the elements of a sequence according to a specified key selector function.
The type of elements of .
The type of the key returned by .
An OrderedParallelQuery{TSource}than contains
elements to sort.
A function to extract a key from an element.
An OrderedParallelQuery{TSource}whose elements are sorted
descending according to a key.
Groups in parallel the elements of a sequence according to a specified key selector function and compares the keys by using a specified comparer.
The type of elements of .
The type of the key returned by >.
An OrderedParallelQuery{TSource} than contains
elements to sort.
A function to extract a key from an element.
An IComparer{TSource} to compare keys.
An OrderedParallelQuery{TSource} whose elements are sorted
descending according to a key.
or is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The type of the key returned by .
The type of the elements in the IGrouping
An OrderedParallelQuery<(Of <(TElement>)>) than contains
elements to sort.
A function to extract a key from an element.
A function to map each source element to an element in an IGrouping.
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 and a key.
or or
is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The type of the key returned by .
The type of the elements in the IGrouping
An OrderedParallelQuery{TSource}than contains elements to sort.
A function to extract a key from an element.
A function to map each source element to an element in an IGrouping.
An IComparer{TSource} to compare keys.
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 and a key.
or or
is a null reference (Nothing in Visual Basic).
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 type of the elements of .
The type of the key returned by .
The type of the result value returned by .
A sequence whose elements to group.
A function to extract the key for each element.
A function to create a result value from each group.
A collection of elements of type where each element represents a
projection over a group and its key.
or or
is a null reference (Nothing in Visual Basic).
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.
The type of the elements of .
The type of the key returned by .
The type of the result value returned by .
A sequence whose elements to group.
A function to extract the key for each element.
A function to create a result value from each group.
An IEqualityComparer{TKey} to compare keys.
An ParallelQuery<IGrouping<TKey, TResult>> in C# or
ParallelQuery(Of IGrouping(Of TKey, TResult)) in Visual Basic where each
IGrouping<(Of <(TKey, TResult>)>) object contains a collection of objects
of type and a key.
or or
is a null reference (Nothing in Visual Basic).
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.
The type of the elements of .
The type of the key returned by .
The type of the elements in each
IGrouping{TKey, TElement}.
The type of the result value returned by .
A sequence whose elements to group.
A function to extract the key for each element.
A function to map each source element to an element in an
IGrouping<TKey, TElement>.
A function to create a result value from each group.
A collection of elements of type where each element represents a
projection over a group and its key.
or or
or is a null reference (Nothing in Visual Basic).
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.
The type of the elements of .
The type of the key returned by .
The type of the elements in each
IGrouping{TKey, TElement}.
The type of the result value returned by .
A sequence whose elements to group.
A function to extract the key for each element.
A function to map each source element to an element in an
IGrouping{Key, TElement}.
A function to create a result value from each group.
An IEqualityComparer{TKey} to compare keys.
A collection of elements of type where each element represents a
projection over a group and its key.
or or
or is a null reference (Nothing in Visual Basic).
Run an aggregation sequentially. If the user-provided reduction function throws an exception, wrap
it with an AggregateException.
if true, use the seed provided in the method argument
if false, use the first element of the sequence as the seed instead
Applies in parallel an accumulator function over a sequence.
The type of the elements of .
A sequence to aggregate over.
An accumulator function to be invoked on each element.
The final accumulator value.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Applies in parallel an accumulator function over a sequence.
The specified seed value is used as the initial accumulator value.
The type of the elements of .
The type of the accumulator value.
A sequence to aggregate over.
The initial accumulator value.
An accumulator function to be invoked on each element.
The final accumulator value.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of the elements of .
The type of the accumulator value.
The type of the resulting value.
A sequence to aggregate over.
The initial accumulator value.
An accumulator function to be invoked on each element.
A function to transform the final accumulator value
into the result value.
The transformed final accumulator value.
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Applies in parallel an accumulator function over a sequence. This overload is not
available in the sequential implementation.
This overload is specific to processing a parallelized query. A parallelized query may
partition the data source sequence into several sub-sequences (partitions).
The is invoked on each element within partitions.
Each partition then yields a single accumulated result. The
is then invoked on the results of each partition to yield a single element. This element is then
transformed by the function.
The type of the elements of .
The type of the accumulator value.
The type of the resulting value.
A sequence to aggregate over.
The initial accumulator value.
An accumulator function to be invoked on each element in a partition.
An accumulator function to be invoked on the yielded element from each partition.
A function to transform the final accumulator value into the result value.
The transformed final accumulator value.
or
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Applies in parallel an accumulator function over a sequence. This overload is not
available in the sequential implementation.
This overload is specific to parallelized queries. A parallelized query may partition the data source sequence
into several sub-sequences (partitions). The is invoked
on each element within partitions. Each partition then yields a single accumulated result.
The
is then invoked on the results of each partition to yield a single element. This element is then
transformed by the function.
The type of the elements of .
The type of the accumulator value.
The type of the resulting value.
A sequence to aggregate over.
A function that returns the initial accumulator value.
An accumulator function to be invoked on each element in a partition.
An accumulator function to be invoked on the yielded element from each partition.
A function to transform the final accumulator value into the result value.
The transformed final accumulator value.
or or
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the number of elements in a parallel sequence.
The type of the elements of .
A sequence that contains elements to be counted.
The number of elements in the input sequence.
is a null reference (Nothing in Visual Basic).
The number of elements in source is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns a number that represents how many elements in the specified
parallel sequence satisfy a condition.
The type of the elements of .
A sequence that contains elements to be counted.
A function to test each element for a condition.
A number that represents how many elements in the sequence satisfy the condition
in the predicate function.
or is a null reference (Nothing in Visual Basic).
The number of elements in source is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns an Int64 that represents the total number of elements in a parallel sequence.
The type of the elements of .
A sequence that contains elements to be counted.
The number of elements in the input sequence.
is a null reference (Nothing in Visual Basic).
The number of elements in source is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns an Int64 that represents how many elements in a parallel sequence satisfy a condition.
The type of the elements of .
A sequence that contains elements to be counted.
A function to test each element for a condition.
A number that represents how many elements in the sequence satisfy the condition
in the predicate function.
or is a null reference (Nothing in Visual Basic).
The number of elements in source is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the sum of a sequence of values.
A sequence of values to calculate the sum of.
The sum of the values in the sequence.
is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values to calculate the sum of.
A transform function to apply to each element.
The sum of the values in the sequence.
or is a null reference (Nothing in Visual Basic).
The sum is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the minimum value in a parallel sequence of values.
The type of elements of .
A sequence of values to determine the minimum value of.
The minimum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements and is a non-nullable value type.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the minimum value.
The type of elements of .
The type of the value returned by .
A sequence of values to determine the minimum value of.
A transform function to apply to each element.
The minimum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements and is a non-nullable value type.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the maximum value in a parallel sequence of values.
A sequence of values to determine the maximum value of.
The maximum value in the sequence.
is a null reference (Nothing in Visual Basic).
contains no elements and is a non-nullable value type.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Invokes in parallel a transform function on each element of a
sequence and returns the maximum value.
The type of elements of .
The type of the value returned by .
A sequence of values to determine the maximum value of.
A transform function to apply to each element.
The maximum value in the sequence.
or is a null reference (Nothing in Visual Basic).
contains no elements and is a non-nullable value type.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
contains no elements.
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
contains no elements.
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Computes in parallel the average of a sequence of values.
A sequence of values that are used to calculate an average.
The average of the sequence of values.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
contains no elements.
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
contains no elements.
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
The sum or count of the elements in the sequence is larger than .
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of elements of .
A sequence of values that are used to calculate an average.
A transform function to apply to each element.
The average of the sequence of values.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Determines in parallel whether any element of a sequence satisfies a condition.
The type of elements of .
An IEnumerable whose elements to apply the predicate to.
A function to test each element for a condition.
true if any elements in the source sequence pass the test in the specified predicate; otherwise, false.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Determines whether a parallel sequence contains any elements.
The type of elements of .
The IEnumerable to check for emptiness.
true if the source sequence contains any elements; otherwise, false.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Determines in parallel whether all elements of a sequence satisfy a condition.
The type of elements of .
A sequence whose elements to apply the predicate to.
A function to test each element for a condition.
true if all elements in the source sequence pass the test in the specified predicate; otherwise, false.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Determines in parallel whether a sequence contains a specified element
by using the default equality comparer.
The type of elements of .
A sequence in which to locate a value.
The value to locate in the sequence.
true if the source sequence contains an element that has the specified value; otherwise, false.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Determines in parallel whether a sequence contains a specified element by using a
specified IEqualityComparer{T}.
The type of elements of .
A sequence in which to locate a value.
The value to locate in the sequence.
An equality comparer to compare values.
true if the source sequence contains an element that has the specified value; otherwise, false.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns a specified number of contiguous elements from the start of a parallel sequence.
The type of elements of .
The sequence to return elements from.
The number of elements to return.
A sequence that contains the specified number of elements from the start of the input sequence.
is a null reference (Nothing in Visual Basic).
Returns elements from a parallel sequence as long as a specified condition is true.
The type of elements of .
The sequence to return elements from.
A function to test each element for a condition.
A sequence that contains the elements from the input sequence that occur before
the element at which the test no longer passes.
or is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The sequence to return elements from.
A function to test each source element for a condition; the second parameter of the
function represents the index of the source element.
A sequence that contains elements from the input sequence that occur before
the element at which the test no longer passes.
or is a null reference (Nothing in Visual Basic).
Bypasses a specified number of elements in a parallel sequence and then returns the remaining elements.
The type of elements of .
The sequence to return elements from.
The number of elements to skip before returning the remaining elements.
A sequence that contains the elements that occur after the specified index in the input sequence.
is a null reference (Nothing in Visual Basic).
Bypasses elements in a parallel sequence as long as a specified
condition is true and then returns the remaining elements.
The type of elements of .
The sequence to return elements from.
A function to test each element for a condition.
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
predicate.
or is a null reference (Nothing in Visual Basic).
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.
The type of elements of .
The sequence to return elements from.
A function to test each source element for a condition; the
second parameter of the function represents the index of the source element.
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
predicate.
or is a null reference (Nothing in Visual Basic).
Concatenates two parallel sequences.
The type of the elements of the input sequences.
The first sequence to concatenate.
The sequence to concatenate to the first sequence.
A sequence that contains the concatenated elements of the two input sequences.
or is a null reference (Nothing in Visual Basic).
This Concat overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Concat with a left data source of type
and a right data source of type .
Otherwise, the Concat operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Determines whether two parallel sequences are equal by comparing the elements by using
the default equality comparer for their type.
The type of the elements of the input sequences.
A sequence to compare to second.
A sequence to compare to the first input sequence.
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.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
This SequenceEqual overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
Thrown every time this method is called.
This overload exists to disallow usage of SequenceEqual with a left data source of type
and a right data source of type .
Otherwise, the SequenceEqual operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Determines whether two parallel sequences are equal by comparing their elements by
using a specified IEqualityComparer{T}.
The type of the elements of the input sequences.
A sequence to compare to .
A sequence to compare to the first input sequence.
An IEqualityComparer<(Of <(T>)>) to use to compare elements.
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.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
This SequenceEqual overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
Thrown every time this method is called.
This overload exists to disallow usage of SequenceEqual with a left data source of type
and a right data source of type .
Otherwise, the SequenceEqual operator would appear to be binding to the parallel implementation,
but would in reality bind to sequential implementation.
Returns distinct elements from a parallel sequence by using the
default equality comparer to compare values.
The type of the elements of .
The sequence to remove duplicate elements from.
A sequence that contains distinct elements from the source sequence.
is a null reference (Nothing in Visual Basic).
Returns distinct elements from a parallel sequence by using a specified
IEqualityComparer{T} to compare values.
The type of the elements of .
The sequence to remove duplicate elements from.
An IEqualityComparer<(Of <(T>)>) to compare values.
A sequence that contains distinct elements from the source sequence.
is a null reference (Nothing in Visual Basic).
Produces the set union of two parallel sequences by using the default equality comparer.
The type of the elements of the input sequences.
A sequence whose distinct elements form the first set for the union.
A sequence whose distinct elements form the second set for the union.
A sequence that contains the elements from both input sequences, excluding duplicates.
or is a null reference (Nothing in Visual Basic).
This Union overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Union with a left data source of type
and a right data source of type .
Otherwise, the Union operator would appear to be binding to the parallel implementation,
but would in reality bind to sequential implementation.
Produces the set union of two parallel sequences by using a specified IEqualityComparer{T}.
The type of the elements of the input sequences.
A sequence whose distinct elements form the first set for the union.
A sequence whose distinct elements form the second set for the union.
An IEqualityComparer<(Of <(T>)>) to compare values.
A sequence that contains the elements from both input sequences, excluding duplicates.
or is a null reference (Nothing in Visual Basic).
This Union overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Union with a left data source of type
and a right data source of type .
Otherwise, the Union operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Produces the set intersection of two parallel sequences by using the
default equality comparer to compare values.
The type of the elements of the input sequences.
A sequence whose distinct elements that also appear in will be returned.
A sequence whose distinct elements that also appear in the first sequence will be returned.
A sequence that contains the elements that form the set intersection of two sequences.
or is a null reference (Nothing in Visual Basic).
This Intersect overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Intersect with a left data source of type
and a right data source of type .
Otherwise, the Intersect operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Produces the set intersection of two parallel sequences by using
the specified IEqualityComparer{T} to compare values.
The type of the elements of the input sequences.
A sequence whose distinct elements that also appear in will be returned.
A sequence whose distinct elements that also appear in the first sequence will be returned.
An IEqualityComparer<(Of <(T>)>) to compare values.
A sequence that contains the elements that form the set intersection of two sequences.
or is a null reference (Nothing in Visual Basic).
This Intersect overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Intersect with a left data source of type
and a right data source of type .
Otherwise, the Intersect operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Produces the set difference of two parallel sequences by using
the default equality comparer to compare values.
The type of the elements of the input sequences.
A sequence whose elements that are not also in will be returned.
A sequence whose elements that also occur in the first sequence will cause those
elements to be removed from the returned sequence.
A sequence that contains the set difference of the elements of two sequences.
or is a null reference (Nothing in Visual Basic).
This Except overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Except with a left data source of type
and a right data source of type .
Otherwise, the Except operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Produces the set difference of two parallel sequences by using the
specified IEqualityComparer{T} to compare values.
The type of the elements of the input sequences.
A sequence whose elements that are not also in will be returned.
A sequence whose elements that also occur in the first sequence will cause those elements
to be removed from the returned sequence.
An IEqualityComparer<(Of <(T>)>) to compare values.
A sequence that contains the set difference of the elements of two sequences.
or is a null reference (Nothing in Visual Basic).
This Except overload should never be called.
This method is marked as obsolete and always throws when called.
This type parameter is not used.
This parameter is not used.
This parameter is not used.
This parameter is not used.
This overload always throws a .
The exception that occurs when this method is called.
This overload exists to disallow usage of Except with a left data source of type
and a right data source of type .
Otherwise, the Except operator would appear to be binding to the parallel implementation,
but would in reality bind to the sequential implementation.
Converts a into an
to force sequential
evaluation of the query.
The type of the elements of .
The sequence to type as .
The input sequence types as .
is a null reference (Nothing in Visual Basic).
Creates an array from a ParallelQuery{T}.
The type of the elements of .
A sequence to create an array from.
An array that contains the elements from the input sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates a List{T} from an ParallelQuery{T}.
The type of the elements of .
A sequence to create a List<(Of <(T>)>) from.
A List<(Of <(T>)>) that contains elements from the input sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to
a specified key selector function.
The type of the elements of .
The type of the key returned by .
A sequence to create a Dictionary<(Of <(TKey, TValue>)>) from.
A function to extract a key from each element.
A Dictionary<(Of <(TKey, TValue>)>) that contains keys and values.
or is a null reference (Nothing in Visual Basic).
produces a key that is a null reference (Nothing in Visual Basic).
-or-
produces duplicate keys for two elements.
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to a
specified key selector function and key comparer.
The type of the elements of .
The type of the key returned by .
A sequence to create a Dictionary<(Of <(TKey, TValue>)>) from.
A function to extract a key from each element.
An IEqualityComparer<(Of <(T>)>) to compare keys.
A Dictionary<(Of <(TKey, TValue>)>) that contains keys and values.
or is a null reference (Nothing in Visual Basic).
produces a key that is a null reference (Nothing in Visual Basic).
-or-
produces duplicate keys for two elements.
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates a Dictionary{TKey,TValue} from a ParallelQuery{T} according to specified
key selector and element selector functions.
The type of the elements of .
The type of the key returned by .
The type of the value returned by .
A sequence to create a Dictionary<(Of <(TKey, TValue>)>) from.
A function to extract a key from each element.
A transform function to produce a result element value from each element.
A Dictionary<(Of <(TKey, TValue>)>) that contains values of type
selected from the input sequence
or or is a null reference (Nothing in Visual Basic).
produces a key that is a null reference (Nothing in Visual Basic).
-or-
produces duplicate keys for two elements.
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates a Dictionary{TKey,TValue from a ParallelQuery{T} according to a
specified key selector function, a comparer, and an element selector function.
The type of the elements of .
The type of the key returned by .
The type of the value returned by .
A sequence to create a Dictionary<(Of <(TKey, TValue>)>) from.
A function to extract a key from each element.
A transform function to produce a result element
value from each element.
An IEqualityComparer<(Of <(T>)>) to compare keys.
A Dictionary<(Of <(TKey, TValue>)>) that contains values of type
selected from the input sequence
or or is a null reference (Nothing in Visual Basic).
produces a key that is a null reference (Nothing in Visual Basic).
-or-
produces duplicate keys for two elements.
-or-
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates an ILookup{TKey,T} from a ParallelQuery{T} according to a specified key selector function.
The type of elements of .
The type of the key returned by .
The sequence to create a Lookup<(Of <(TKey, TElement>)>) from.
A function to extract a key from each element.
A Lookup<(Of <(TKey, TElement>)>) that contains keys and values.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates an ILookup{TKey,T} from a ParallelQuery{T} according to a specified
key selector function and key comparer.
The type of elements of .
The type of the key returned by .
The sequence to create a Lookup<(Of <(TKey, TElement>)>) from.
A function to extract a key from each element.
An IEqualityComparer<(Of <(T>)>) to compare keys.
A Lookup<(Of <(TKey, TElement>)>) that contains keys and values.
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates an ILookup{TKey,TElement} from a ParallelQuery{T} according to specified
key selector and element selector functions.
The type of elements of .
The type of the key returned by .
The type of the value returned by .
The sequence to create a Lookup<(Of <(TKey, TElement>)>) from.
A function to extract a key from each element.
A transform function to produce a result element value from each element.
A Lookup<(Of <(TKey, TElement>)>) that contains values of type TElement
selected from the input sequence.
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Creates an ILookup{TKey,TElement} from a ParallelQuery{T} according to
a specified key selector function, a comparer and an element selector function.
The type of elements of .
The type of the key returned by .
The type of the value returned by .
The sequence to create a Lookup<(Of <(TKey, TElement>)>) from.
A function to extract a key from each element.
A transform function to produce a result element value from each element.
An IEqualityComparer<(Of <(T>)>) to compare keys.
A Lookup<(Of <(TKey, TElement>)>) that contains values of type TElement selected
from the input sequence.
or or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Inverts the order of the elements in a parallel sequence.
The type of the elements of .
A sequence of values to reverse.
A sequence whose elements correspond to those of the input sequence in reverse order.
is a null reference (Nothing in Visual Basic).
Filters the elements of a ParallelQuery based on a specified type.
The type to filter the elements of the sequence on.
The sequence whose elements to filter.
A sequence that contains elements from the input sequence of type .
is a null reference (Nothing in Visual Basic).
Converts the elements of a ParallelQuery to the specified type.
The type to convert the elements of to.
The sequence that contains the elements to be converted.
A sequence that contains each element of the source sequence converted to the specified type.
is a null reference (Nothing in Visual Basic).
Returns the first element of a parallel sequence.
The type of the elements of .
The sequence to return the first element of.
The first element in the specified sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the first element in a parallel sequence that satisfies a specified condition.
There's a temporary difference from LINQ to Objects, this does not throw
ArgumentNullException when the predicate is null.
The type of the elements of .
The sequence to return an element from.
A function to test each element for a condition.
The first element in the sequence that passes the test in the specified predicate function.
or is a null reference (Nothing in Visual Basic).
No element in satisfies the condition in .
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the first element of a parallel sequence, or a default value if the
sequence contains no elements.
The type of the elements of .
The sequence to return the first element of.
default(TSource) if is empty; otherwise, the first element in .
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the first element of the parallel sequence that satisfies a condition or a
default value if no such element is found.
There's a temporary difference from LINQ to Objects, this does not throw
ArgumentNullException when the predicate is null.
The type of the elements of .
The sequence to return an element from.
A function to test each element for a condition.
default(TSource) if is empty or if no element passes the test
specified by predicate; otherwise, the first element in that
passes the test specified by predicate.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the last element of a parallel sequence.
The type of the elements of .
The sequence to return the last element from.
The value at the last position in the source sequence.
is a null reference (Nothing in Visual Basic).
contains no elements.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the last element of a parallel sequence that satisfies a specified condition.
The type of the elements of .
The sequence to return an element from.
A function to test each element for a condition.
The last element in the sequence that passes the test in the specified predicate function.
or is a null reference (Nothing in Visual Basic).
No element in satisfies the condition in .
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the last element of a parallel sequence, or a default value if the
sequence contains no elements.
The type of the elements of .
The sequence to return an element from.
default() if the source sequence is empty; otherwise, the last element in the sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the last element of a parallel sequence that satisfies a condition, or
a default value if no such element is found.
The type of the elements of .
The sequence to return an element from.
A function to test each element for a condition.
default() 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.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the only element of a parallel sequence, and throws an exception if there is not
exactly one element in the sequence.
The type of the elements of .
The sequence to return the single element of.
The single element of the input sequence.
is a null reference (Nothing in Visual Basic).
The input sequence contains more than one element. -or- The input sequence is empty.
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the only element of a parallel sequence that satisfies a specified condition,
and throws an exception if more than one such element exists.
The type of the elements of .
The sequence to return the single element of.
A function to test an element for a condition.
The single element of the input sequence that satisfies a condition.
or is a null reference (Nothing in Visual Basic).
No element satisfies the condition in . -or- More than one element satisfies the condition in .
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of the elements of .
The sequence to return the single element of.
The single element of the input sequence, or default() if the
sequence contains no elements.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
The type of the elements of .
The sequence to return the single element of.
A function to test an element for a condition.
The single element of the input sequence that satisfies the condition, or
default() if no such element is found.
or is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the elements of the specified parallel sequence or the type parameter's
default value in a singleton collection if the sequence is empty.
The type of the elements of .
The sequence to return a default value for if it is empty.
A sequence that contains default(TSource) if is empty; otherwise, .
is a null reference (Nothing in Visual Basic).
Returns the elements of the specified parallel sequence or the specified value
in a singleton collection if the sequence is empty.
The type of the elements of .
The sequence to return the specified value for if it is empty.
The value to return if the sequence is empty.
A sequence that contains defaultValue if is empty; otherwise, .
is a null reference (Nothing in Visual Basic).
Returns the element at a specified index in a parallel sequence.
The type of the elements of .
A sequence to return an element from.
The zero-based index of the element to retrieve.
The element at the specified position in the source sequence.
is a null reference (Nothing in Visual Basic).
is less than 0 or greater than or equal to the number of elements in .
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
Returns the element at a specified index in a parallel sequence or a default value if the
index is out of range.
The type of the elements of .
A sequence to return an element from.
The zero-based index of the element to retrieve.
default(TSource) if the index is outside the bounds of the source sequence;
otherwise, the element at the specified position in the source sequence.
is a null reference (Nothing in Visual Basic).
One or more exceptions occurred during the evaluation of the query.
The query was canceled.
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.
Use NotBuffered 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.
Use AutoBuffered for most cases; this is the default. It strikes a balance between latency and
overall performance.
Use FullyBuffered 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.
Use the default merge type, which is AutoBuffered.
Use a merge without output buffers. As soon as result elements have been computed,
make that element available to the consumer of the query.
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.
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.
This is a bounded channel meant for single-producer/single-consumer scenarios.
Specifies the type of data in the channel.
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.
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.
Represents a parallel sequence.
Represents a parallel sequence.
Returns an enumerator that iterates through the sequence.
An enumerator that iterates through the sequence.
Returns an enumerator that iterates through the sequence.
An enumerator that iterates through the sequence.
A common enumerator type that unifies all query operator enumerators.
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}.
An interface that allows developers to specify their own partitioning routines.
A simple implementation of the ParallelQuery{object} interface which wraps an
underlying IEnumerable, such that it can be used in parallel queries.
A simple implementation of the ParallelQuery{T} interface which wraps an
underlying IEnumerable{T}, such that it can be used in parallel queries.
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.
A simple enumerable type that implements the range algorithm. It also supports
partitioning of the indices by implementing an interface that PLINQ recognizes.
A simple enumerable type that implements the repeat algorithm. It also supports
partitioning of the count space by implementing an interface that PLINQ recognizes.
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.
Used as a stand-in for replaceable merge algorithms. Alternative implementations
are chosen based on the style of merge required.
Instantiates the array merge helper.
The query settings
The query results
A method used as a delegate passed into the ForAll operator
Schedules execution of the merge itself.
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().
Returns the merged results as an array.
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.
Convenience class used by enumerators that merge many partitions into one.
WaitAny simulates a Win32-style WaitAny on the set of thin-events.
An array of thin-events (null elements permitted)
The index of the specific event in events that caused us to wake up.
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.
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.
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.
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.
The initial capacity of the buffer queue. The value was chosen experimentally.
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.
If the producer notices that the queue reached this limit, it will go to sleep until woken up
by the consumer. Chosen experimentally.
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.
Buffers for the results. Each buffer has elements added by one producer, and removed
by the consumer.
Whether each producer is done producing. Set to true by individual producers, read by consumer.
Whether a particular producer is waiting on the consumer. Read by the consumer, set to true
by producers, set to false by the consumer.
Whether the consumer is waiting on a particular producer. Read by producers, set to true
by consumer, set to false by producer.
Each object is a lock protecting the corresponding elements in m_buffers, m_producerDone,
m_producerWaiting and m_consumerWaiting.
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.
A structure to represent a producer in the producer heap.
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 +
Enumerator over the results of an order-preserving pipelining merge.
Merge helper associated with this enumerator
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.
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.
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.
Tracks whether MoveNext() has already been called previously.
Constructor
Moves the enumerator to the next result, or returns false if there are no more results to yield.
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.
Wait until a producer's buffer is non-empty, or until that producer is done.
false if there is no element to yield because the producer is done, true otherwise
Looks for an element from a particular producer in the consumer's private buffer.
Returns the current result
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.
This enumerator handles the actual coordination among partitions required to
accomplish the repartitioning operation, as explained above.
The kind of elements.
The key used to distribute elements.
The kind of keys found in the source (ignored).
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.
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.
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.
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.
The kind of elements.
The key used to distribute elements.
The kind of keys found in the source.
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.
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).
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.
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.
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.
A QueryOperator that represents the output of the query partitioner.AsParallel().
Determines the OrdinalIndexState for a partitioner
QueryResults for a PartitionerQueryOperator
Enumerator that converts an enumerator over key-value pairs exposed by a partitioner
to a QueryOperatorEnumerator used by PLINQ internally.
Enumerator that converts an enumerator over key-value pairs exposed by a partitioner
to a QueryOperatorEnumerator used by PLINQ internally.
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.
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.
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.
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.
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
Operator that yields the intersection of two data sources.
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.
Operator that yields the union of two data sources.
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.
Partitioned stream recipient that will merge the results.
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.
Opens the query and initializes m_openedQueryEnumerator and m_querySettings.
Called from the first MoveNext call.
An inlined count aggregation and its enumerator.
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.
A class with some shared implementation between all aggregation enumerators.
An inlined average aggregation operator and its enumerator, for decimals.
An inlined min/max aggregation and its enumerator, for decimals.
An inlined sum aggregation and its enumerator, for decimals.
An inlined average aggregation operator and its enumerator, for doubles.
An inlined min/max aggregation and its enumerator, for doubles.
Notes:
Note that normally double.NaN < anything is false, as is anything < 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.
An inlined sum aggregation and its enumerator, for doubles.
An inlined average aggregation operator and its enumerator, for floats.
An inlined min/max aggregation and its enumerator, for floats.
An inlined sum aggregation and its enumerator, for floats.
An inlined average aggregation operator and its enumerator, for ints.
An inlined min/max aggregation and its enumerator, for ints.
Inlined aggregations for summing up primitives (int, long, float, double, decimal), as
well as the nullable versions of each (int?, long?, float?, double?, decimal?).
An inlined average aggregation operator and its enumerator, for longs.
An inlined count aggregation and its enumerator.
An inlined min/max aggregation and its enumerator, for longs.
An inlined sum aggregation and its enumerator, for longs.
An inlined average aggregation operator and its enumerator, for Nullable decimals.
An inlined min/max aggregation and its enumerator, for Nullable decimals.
An inlined sum aggregation and its enumerator, for nullable decimals.
An inlined average aggregation operator and its enumerator, for Nullable doubles.
An inlined min/max aggregation and its enumerator, for Nullable{Double}s.
Notes:
Note that normally double.NaN < anything is false, as is anything < 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.
An inlined sum aggregation and its enumerator, for nullable doubles.
An inlined average aggregation operator and its enumerator, for Nullable floats.
An inlined min/max aggregation and its enumerator, for Nullable floats.
Notes:
Note that normally float.NaN < anything is false, as is anything < 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.
An inlined sum aggregation and its enumerator, for Nullable floats.
An inlined average aggregation operator and its enumerator, for Nullable ints.
An inlined min/max aggregation and its enumerator, for Nullable ints.
An inlined sum aggregation and its enumerator, for Nullable ints.
An inlined average aggregation operator and its enumerator, for Nullable longs.
An inlined min/max aggregation and its enumerator, for Nullable{Int64}s.
An inlined sum aggregation and its enumerator, for Nullable longs.
Class to represent an IList{T} as QueryResults{T}
Describes the state of order preservation index associated with an enumerator.
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.
Represents operators AsOrdered and AsUnordered. In the current implementation, it
simply turns on preservation globally in the query.
Represents operators that set various query execution options.
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.
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.
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.
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.
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.
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.
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.
result
withDefaultValue
whether an element with this index exists
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.
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.
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.
An ordered version of the grouping data structure. Represents an ordered group of elements that
have the same grouping key.
Constructs a new grouping
Add an element
No more elements will be added, so we can sort the group now.
The key this grouping represents.
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.
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.
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).
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.
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.
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.)
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)
The operator type for Select statements. This operator transforms elements as it
enumerates them through the use of a selector delegate.
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.
The query operator for OrderBy and ThenBy.
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.
Determines the order index state for the output operator
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).
Determines the order index state for the output operator
The operator type for Where statements. This operator filters out elements that
don't match a filter function (supplied at instantiation time).
Poll frequency (number of loops per cancellation check) for situations where per-1-loop testing is too high an overhead.
Throws an OCE if the merged token has been canceled.
A token to check for cancelation.
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).
Simple abstract task representation, allowing either synchronous and asynchronous
execution. Subclasses override the Work API to implement the logic.
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.
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.
Constructor
This method is responsible for enumerating results and enqueueing them to
the output buffer as appropriate. Each base class implements its own.
Creates and begins execution of a new set of spooling tasks.
Dispose the underlying enumerator and wake up the consumer if necessary.
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.
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.
A factory class to execute spooling logic.
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.
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.
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.
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.
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.
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{}.
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.
Wraps a function with a try/catch that morphs all exceptions into AggregateException.
The input argument type.
The return value type.
A function to use internally.
The cancellation state to use.
A new function containing exception wrapping logic.
ExchangeUtilities is a static class that contains helper functions to partition and merge
streams.
Used during hash partitioning, when the keys being memoized are not used for anything.
Very simple heap data structure, of fixed size.
A growing array. Unlike List{T}, it makes the internal array available to its user.
A simple hash map data structure, derived from the LINQ set we also use.
The kind of keys contained within.
The kind of values contained within.
A linked list of array chunks. Allows direct access to its arrays.
The elements held within.
Allocates a new root chunk of a particular size.
Adds an element to this chunk. Only ever called on the root.
The new element.
Fetches an enumerator to walk the elements in all chunks rooted from this one.
The next chunk in the linked chain.
The number of elements contained within this particular chunk.
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.
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.
PairComparer compares pairs by the first element, and breaks ties by the second
element.
Comparer that wraps another comparer, and flips the result of each comparison to the
opposite answer.
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
The kind of elements contained within.
A very simple primitive that allows us to share a value across multiple threads.
Common miscellaneous utility methods used throughout the code-base.
A struct to wrap any arbitrary object reference or struct. Used for situations
where we can't tolerate null values (like keys for hashtables).
Compares two wrapped structs of the same underlying type for equality. Simply
wraps the actual comparer for the type being wrapped.
Represents a sorted, parallel sequence.
Returns an enumerator that iterates through the sequence.
An enumerator that iterates through the sequence.
The query execution mode is a hint that specifies how the system should handle
performance trade-offs when parallelizing queries.
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.
Parallelize the entire query, even if that means using high-overhead algorithms.
Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of
instances.
Creates a proxy Task that represents the
asynchronous operation of a Task{Task}.
It is often useful to be able to return a Task from a
Task{TResult}, 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}.
The Task{Task} to unwrap.
The exception that is thrown if the
argument is null.
A Task that represents the asynchronous operation of the provided Task{Task}.
Creates a proxy Task{TResult} that represents the
asynchronous operation of a Task{Task{TResult}}.
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}}.
The Task{Task{TResult}} to unwrap.
The exception that is thrown if the
argument is null.
A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task.