BlockingCollection<T>.TryTakeFromAny Method (BlockingCollection<T>[], T)
![]() |
---|
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience. |
Tries to remove an item from any one of the specified BlockingCollection<T> instances.
Assembly: System (in System.dll)
Parameters
- collections
-
Type:
System.Collections.Concurrent.BlockingCollection<T>[]
The array of collections.
- item
-
Type:
T
The item removed from one of the collections.
Return Value
Type: System.Int32The index of the collection in the collections array from which the item was removed, or -1 if an item could not be removed.
Exception | Condition |
---|---|
ObjectDisposedException | At least one of the BlockingCollection<T> instances has been disposed. |
ArgumentNullException | The collections argument is null. |
ArgumentOutOfRangeException | The count of collections is greater than the maximum size of 62 for STA and 63 for MTA. |
ArgumentException | The collections argument is a 0-length array or contains a null element. |
InvalidOperationException | At least one of the underlying collections was modified outside of its BlockingCollection<T> instance. |
A call to TryTakeFromAny may block until an item is available to be removed.
The following example shows how to use the BlockingCollection<T>.TryTakeFromAny method:
class FromToAnyDemo { // Demonstrates: // Bounded BlockingCollection<T> // BlockingCollection<T>.TryAddToAny() // BlockingCollection<T>.TryTakeFromAny() public static void BC_FromToAny() { BlockingCollection<int>[] bcs = new BlockingCollection<int>[2]; bcs[0] = new BlockingCollection<int>(5); // collection bounded to 5 items bcs[1] = new BlockingCollection<int>(5); // collection bounded to 5 items // Should be able to add 10 items w/o blocking int numFailures = 0; for (int i = 0; i < 10; i++) { if (BlockingCollection<int>.TryAddToAny(bcs, i) == -1) numFailures++; } Console.WriteLine("TryAddToAny: {0} failures (should be 0)", numFailures); // Should be able to retrieve 10 items int numItems = 0; int item; while (BlockingCollection<int>.TryTakeFromAny(bcs, out item) != -1) numItems++; Console.WriteLine("TryTakeFromAny: retrieved {0} items (should be 10)", numItems); } }
Available since 8
.NET Framework
Available since 4.0
Portable Class Library
Supported in: portable .NET platforms
Windows Phone
Available since 8.1