Sdílet prostřednictvím


Podproces sdružování (C# a Visual Basic)

A fondu podprocesů je kolekce podprocesů, které lze provádět několik úloh na pozadí.(Viz Zřetězení (C# a Visual Basic) informace.) To ponechá primární podproces asynchronně provádět další úlohy.

Fondy podprocesů jsou často zaměstnán v serverových aplikací.Každý příchozí požadavek je přiřazeno vlákno z fondu podprocesů, takže požadavek lze zpracovat asynchronně, bez obsadit primární vlákna nebo zpoždění zpracování dalších požadavků.

Po dokončení svých úkolů podproces fondu je vrácen fronty čekajících podprocesů, kde ji lze znovu použít.Použití umožňuje aplikacím, aby náklady na vytváření nového vlákna pro každý úkol.

Fondy podprocesů obvykle mají maximální počet podprocesů.Pokud jsou všechny podprocesy zaneprázdněn, další úkoly budou do fronty dokud jsou obsluhovány nově dostupné podprocesy.

Můžete implementovat vlastní fondu podprocesů, ale je jednodušší použít fondu podprocesů poskytované.NET Framework prostřednictvím ThreadPool třídy.

S podprocesem sdružování, zavolejte ThreadPool.QueueUserWorkItem metodou s delegát procedury, kterou chcete spustit, a Visual Basic nebo C# podprocesu vytvoří a spustí procedury.

Podproces sdružování příklad

Následující příklad ukazuje použití podproces sdružování spustit několik úkolů.

Public Sub DoWork()
    ' Queue a task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        New System.Threading.WaitCallback(AddressOf SomeLongTask))
    ' Queue another task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        New System.Threading.WaitCallback(AddressOf AnotherLongTask))
End Sub
Private Sub SomeLongTask(ByVal state As Object)
    ' Insert code to perform a long task.
End Sub
Private Sub AnotherLongTask(ByVal state As Object)
    ' Insert code to perform another long task.
End Sub
public void DoWork()
{
    // Queue a task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        new System.Threading.WaitCallback(SomeLongTask));
    // Queue another task.
    System.Threading.ThreadPool.QueueUserWorkItem(
        new System.Threading.WaitCallback(AnotherLongTask));
}

private void SomeLongTask(Object state)
{
    // Insert code to perform a long task.
}

private void AnotherLongTask(Object state)
{
    // Insert code to perform a long task.
}

Jednou z výhod vláken je, že můžete předat argumenty v objektu stavu úkolu postupem.Postup při volání vyžaduje-li více než jeden argument, odevzdaných strukturu nebo instance třídy do Object datového typu.

Parametry fondu podprocesů a vrácené hodnoty

Vracení hodnot z podproces fondu podprocesů není jednoduché.Standardní způsob vracení hodnot z volání funkce není povolena, protože Sub postupy jsou pouze typ postupu, který může být zařazen do fronty fondu podprocesů.Způsob můžete zadat parametry a je obtékání parametrů vrácené hodnoty vrácené hodnoty a metod v obal třídy, jak je popsáno v Parametry a vrácené hodnoty procedury s více podprocesy (C# a Visual Basic).

Easer způsobu poskytují parametry a hodnoty je použití nepovinné ByVal stav proměnné objektu QueueUserWorkItem metoda.Pokud průchod odkaz na instanci třídy pomocí této proměnné členů instance lze upravit podproces fondu podprocesů a použity jako vrácené hodnoty.

Nejprve jej nemusí být zřejmé, můžete upravit objekt odkazuje proměnná, která je předaná hodnota.Lze to provést, protože podle hodnoty je předán pouze odkaz na objekt.Když změníte členy objekt uvedený odkaz na objekt, změny do instance třídy skutečné.

Struktury nelze vracet hodnoty uvnitř státu objekty.Protože struktury jsou typy hodnot, změny, které provádí asynchronní proces členy původní struktura neměňte.Zajistit parametrů vrácené hodnoty nejsou potřeba použijte struktur.

Viz také

Úkoly

Jak: použití fondu podprocesů (C# a Visual Basic)

Referenční dokumentace

Podproces synchronizace (C# a Visual Basic)

QueueUserWorkItem

System.Threading

ThreadPool

Koncepty

Aplikace s více podprocesy (C# a Visual Basic)

Další zdroje

Zřetězení (C# a Visual Basic)

JAK: Odeslat pracovní položky fondu podprocesů pomocí aplikace Visual C#