Osvědčené postupy pro používání fondu vláken

Toto téma popisuje osvědčené postupy pro práci s fondem vláken.

Co dělat

  • Pomocí fondu vláken můžete v aplikaci pracovat paralelně.

  • Pomocí pracovních položek můžete provádět rozšířené úlohy bez blokování vlákna uživatelského rozhraní.

  • Vytvořte pracovní položky, které jsou krátkodobé a nezávislé. Pracovní úlohy běží asynchronně a lze je z fronty odesílat do fondu v libovolném pořadí.

  • Odešle aktualizace do vlákna uživatelského rozhraní. V aplikacích WinUI 3 použijte DispatcherQueue.TryEnqueue z Microsoft.UI.Dispatching.DispatcherQueue.

  • Místo funkce Sleep použijte ThreadPoolTimer.CreateTimer.

  • Místo vytváření vlastního systému pro správu vláken použijte fond vláken. Fond vláken funguje na úrovni operačního systému, nabízí pokročilé možnosti a je optimalizován tak, aby se dynamicky přizpůsoboval prostředkům zařízení a jeho aktivitě v rámci procesu i napříč systémem.

  • V jazyce C++ se ujistěte, že delegáti pracovních položek používají agilní model vláken (delegáti C++ jsou ve výchozím nastavení agilní).

  • Pokud nemůžete tolerovat selhání přidělení prostředků v době použití, použijte předem přidělené pracovní položky.

Zakázané činnosti

  • Nevytvávejte pravidelné časovače s hodnotou<období 1 milisekund (včetně 0). To způsobí, že pracovní položka bude fungovat jako jednorázový časovač.

  • Neodesílejte pravidelné pracovní položky, které trvá déle, než je doba, kterou jste zadali v parametru období .

  • Nepokoušejte se odesílat aktualizace uživatelského rozhraní (jiné než informační zprávy a oznámení) z pracovní položky odeslané z úlohy na pozadí. Místo toho použijte průběh úlohy na pozadí a obslužné rutiny pro dokončení – například IBackgroundTaskInstance.Progress.

  • Pokud používáte obslužné rutiny pracovních položek, které používají klíčové slovo async, nepředpokládejte, že veškerý kód v obslužné rutině byl proveden, když je u pracovní položky nastaven stav Dokončeno. Pracovní položka fondu vláken může být označena jako dokončená ještě předtím, než se vykoná veškerý kód v obslužné rutině. Kód následující po klíčovém slovu await v obslužné rutině se může spustit po nastavení pracovní položky na úplný stav.

  • Nepokoušejte se spustit předem přidělenou pracovní položku více než jednou, aniž byste ji znovu inicializovali. Vytvoření pravidelné pracovní položky