次の方法で共有


BlockingCollection<T>.TryTake メソッド

定義

BlockingCollection<T> から項目の削除を試みます。

オーバーロード

TryTake(T)

BlockingCollection<T> から項目の削除を試みます。

TryTake(T, TimeSpan)

指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

TryTake(T, Int32, CancellationToken)

キャンセル トークンを観察しながら、指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

TryTake(T, Int32)

指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

TryTake メソッドを使用する方法の例を次に示します。

class TryTakeDemo
{
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.CompleteAdding()
    //      BlockingCollection<T>.TryTake()
    //      BlockingCollection<T>.IsCompleted
    public static void BC_TryTake()
    {
        // Construct and fill our BlockingCollection
        using (BlockingCollection<int> bc = new BlockingCollection<int>())
        {
            int NUMITEMS = 10000;
            for (int i = 0; i < NUMITEMS; i++) bc.Add(i);
            bc.CompleteAdding();
            int outerSum = 0;

            // Delegate for consuming the BlockingCollection and adding up all items
            Action action = () =>
            {
                int localItem;
                int localSum = 0;

                while (bc.TryTake(out localItem)) localSum += localItem;
                Interlocked.Add(ref outerSum, localSum);
            };

            // Launch three parallel actions to consume the BlockingCollection
            Parallel.Invoke(action, action, action);

            Console.WriteLine("Sum[0..{0}) = {1}, should be {2}", NUMITEMS, outerSum, ((NUMITEMS * (NUMITEMS - 1)) / 2));
            Console.WriteLine("bc.IsCompleted = {0} (should be true)", bc.IsCompleted);
        }
    }
}
module TryTakeDemo =
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.CompleteAdding()
    //      BlockingCollection<T>.TryTake()
    //      BlockingCollection<T>.IsCompleted
    let blockingCollectionTryTake () =
        // Construct and fill our BlockingCollection
        use bc = new BlockingCollection<int>()
        let NUMITEMS = 10000;
        for i = 0 to NUMITEMS - 1 do
            bc.Add i
        bc.CompleteAdding()
        let mutable outerSum = 0

        // Delegate for consuming the BlockingCollection and adding up all items
        let action = 
            Action(fun () ->
                let mutable localItem = 0
                let mutable localSum = 0

                while bc.TryTake &localItem do
                    localSum <- localSum + localItem
                Interlocked.Add(&outerSum, localSum)
                |> ignore)

        // Launch three parallel actions to consume the BlockingCollection
        Parallel.Invoke(action, action, action)

        printfn $"Sum[0..{NUMITEMS}) = {outerSum}, should be {((NUMITEMS * (NUMITEMS - 1)) / 2)}"
        printfn $"bc.IsCompleted = {bc.IsCompleted} (should be true)"
'Imports System.Collections.Concurrent
'Imports System.Threading
'Imports System.Threading.Tasks

Class TryTakeDemo
    ' Demonstrates:
    ' BlockingCollection<T>.Add()
    ' BlockingCollection<T>.CompleteAdding()
    ' BlockingCollection<T>.TryTake()
    ' BlockingCollection<T>.IsCompleted
    Shared Sub BC_TryTake()
        ' Construct and fill our BlockingCollection
        Using bc As New BlockingCollection(Of Integer)()
            Dim NUMITEMS As Integer = 10000
            For i As Integer = 0 To NUMITEMS - 1
                bc.Add(i)
            Next
            bc.CompleteAdding()
            Dim outerSum As Integer = 0

            ' Delegate for consuming the BlockingCollection and adding up all items
            Dim action As Action =
                Sub()
                    Dim localItem As Integer
                    Dim localSum As Integer = 0

                    While bc.TryTake(localItem)
                        localSum += localItem
                    End While
                    Interlocked.Add(outerSum, localSum)
                End Sub

            ' Launch three parallel actions to consume the BlockingCollection
            Parallel.Invoke(action, action, action)

            Console.WriteLine("Sum[0..{0}) = {1}, should be {2}", NUMITEMS, outerSum, ((NUMITEMS * (NUMITEMS - 1)) / 2))
            Console.WriteLine("bc.IsCompleted = {0} (should be true)", bc.IsCompleted)
        End Using
    End Sub

End Class

TryTake(T)

ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs

BlockingCollection<T> から項目の削除を試みます。

public:
 bool TryTake([Runtime::InteropServices::Out] T % item);
public bool TryTake (out T item);
member this.TryTake : 'T -> bool
Public Function TryTake (ByRef item As T) As Boolean

パラメーター

item
T

コレクションから削除される項目。

戻り値

項目を削除できた場合は true。それ以外の場合は false

例外

BlockingCollection<T> は破棄されています。

基になるコレクションが BlockingCollection<T> インスタンスの外部で変更されました。

注釈

コレクションが空の場合、このメソッドは直ちに false を返します。

項目が削除される順序は、BlockingCollection<T> インスタンスの作成に使用されたコレクションの型によって異なります。 BlockingCollection<T> オブジェクトを作成すると、使用するコレクションの型を指定できます。 たとえば、先入れ先出し法 (FIFO) の動作には ConcurrentQueue<T> オブジェクトを指定し、後入れ先出し法 (LIFO) の動作には ConcurrentStack<T> オブジェクトを指定できます。 IProducerConsumerCollection<T> インターフェイスを実装する任意のコレクション クラスを使用できます。 BlockingCollection<T> の既定のコレクション型は ConcurrentQueue<T> です。

こちらもご覧ください

適用対象

TryTake(T, TimeSpan)

ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs

指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

public:
 bool TryTake([Runtime::InteropServices::Out] T % item, TimeSpan timeout);
public bool TryTake (out T item, TimeSpan timeout);
member this.TryTake : 'T * TimeSpan -> bool
Public Function TryTake (ByRef item As T, timeout As TimeSpan) As Boolean

パラメーター

item
T

コレクションから削除される項目。

timeout
TimeSpan

TimeSpan項目が削除されるまで待機するミリ秒数を表す 。またはTimeSpan、無期限に待機する -1 ミリ秒を表す 。

戻り値

true 指定した時間内にアイテムをコレクションから削除できる場合は 。それ以外の場合は false

例外

BlockingCollection<T> は破棄されています。

timeout は無限のタイムアウトを表す -1 ミリ秒以外の負の数です。

または

timeoutInt32.MaxValue より大きい。

基になるコレクションが BlockingCollection<T> インスタンスの外部で変更されました。

注釈

項目が削除される順序は、BlockingCollection<T> インスタンスの作成に使用されたコレクションの型によって異なります。 BlockingCollection<T> オブジェクトを作成すると、使用するコレクションの型を指定できます。 たとえば、先入れ先出し法 (FIFO) の動作には ConcurrentQueue<T> オブジェクトを指定し、後入れ先出し法 (LIFO) の動作には ConcurrentStack<T> オブジェクトを指定できます。 IProducerConsumerCollection<T> インターフェイスを実装する任意のコレクション クラスを使用できます。 BlockingCollection<T> の既定のコレクション型は ConcurrentQueue<T> です。

こちらもご覧ください

適用対象

TryTake(T, Int32, CancellationToken)

ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs

キャンセル トークンを観察しながら、指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

public:
 bool TryTake([Runtime::InteropServices::Out] T % item, int millisecondsTimeout, System::Threading::CancellationToken cancellationToken);
public bool TryTake (out T item, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
member this.TryTake : 'T * int * System.Threading.CancellationToken -> bool
Public Function TryTake (ByRef item As T, millisecondsTimeout As Integer, cancellationToken As CancellationToken) As Boolean

パラメーター

item
T

コレクションから削除される項目。

millisecondsTimeout
Int32

アイテムが削除されるまで待機するミリ秒数、または Infinite (-1) が無期限に待機します。

cancellationToken
CancellationToken

観察するキャンセル トークン。

戻り値

true 指定した時間内にアイテムをコレクションから削除できる場合は 。それ以外の場合は false

例外

CancellationToken は取り消されました。

BlockingCollection<T> が破棄されているか、または基になっている CancellationTokenSource が破棄されています。

millisecondsTimeout は無限のタイムアウトを表す -1 以外の負の数です。

基になるコレクションがこの BlockingCollection<T> インスタンスの外部で変更されました 。

注釈

項目が削除される順序は、BlockingCollection<T> インスタンスの作成に使用されたコレクションの型によって異なります。 BlockingCollection<T> オブジェクトを作成すると、使用するコレクションの型を指定できます。 たとえば、先入れ先出し法 (FIFO) の動作には ConcurrentQueue<T> オブジェクトを指定し、後入れ先出し法 (LIFO) の動作には ConcurrentStack<T> オブジェクトを指定できます。 IProducerConsumerCollection<T> インターフェイスを実装する任意のコレクション クラスを使用できます。 BlockingCollection<T> の既定のコレクション型は ConcurrentQueue<T> です。

こちらもご覧ください

適用対象

TryTake(T, Int32)

ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs
ソース:
BlockingCollection.cs

指定した期間内に、BlockingCollection<T> から項目の削除を試みます。

public:
 bool TryTake([Runtime::InteropServices::Out] T % item, int millisecondsTimeout);
public bool TryTake (out T item, int millisecondsTimeout);
member this.TryTake : 'T * int -> bool
Public Function TryTake (ByRef item As T, millisecondsTimeout As Integer) As Boolean

パラメーター

item
T

コレクションから削除される項目。

millisecondsTimeout
Int32

アイテムが削除されるまで待機するミリ秒数、または Infinite (-1) が無期限に待機します。

戻り値

true 指定した時間内にアイテムをコレクションから削除できる場合は 。それ以外の場合は false

例外

BlockingCollection<T> は破棄されています。

millisecondsTimeout は無限のタイムアウトを表す -1 以外の負の数です。

基になるコレクションが BlockingCollection<T> インスタンスの外部で変更されました。

注釈

項目が削除される順序は、BlockingCollection<T> インスタンスの作成に使用されたコレクションの型によって異なります。 を作成するときに、 BlockingCollection<T>使用するコレクションの種類を指定できます。 たとえば、先入れ先出し法 (FIFO) の動作には ConcurrentQueue<T> オブジェクトを指定し、後入れ先出し法 (LIFO) の動作には ConcurrentStack<T> オブジェクトを指定できます。 IProducerConsumerCollection<T> インターフェイスを実装する任意のコレクション クラスを使用できます。 BlockingCollection<T> の既定のコレクション型は ConcurrentQueue<T> です。

こちらもご覧ください

適用対象