JoinableTaskContext Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Společný kontext, ve kterém se můžou vytvářet spojitelné úkoly a interagovat, aby nedocházelo k zablokování.
public ref class JoinableTaskContext : IDisposable, Microsoft::VisualStudio::Threading::IHangReportContributor
public class JoinableTaskContext : IDisposable, Microsoft.VisualStudio.Threading.IHangReportContributor
type JoinableTaskContext = class
interface IHangReportContributor
interface IDisposable
Public Class JoinableTaskContext
Implements IDisposable, IHangReportContributor
- Dědičnost
-
JoinableTaskContext
- Implementuje
Poznámky
Při použití nebo interakci s joinableTasks byste měli dodržovat tři pravidla: 1. Pokud má metoda určité požadavky na byt vlákna (STA nebo MTA), musí mít buď: a) Mít asynchronní podpis a asynchronně zařadí do příslušného vlákna, pokud není původně vyvolána v kompatibilním vlákně. Doporučený způsob, jak přepnout na hlavní vlákno, je:
await JoinableTaskFactory.SwitchToMainThreadAsync();
b) Mít synchronní podpis a vyvolat výjimku při zavolání na nesprávné vlákno. Konkrétně není povolena žádná metoda synchronně zařazovat práci do jiného vlákna (blokování při dokončení této práce). Synchronní bloky obecně je třeba se vyhnout, kdykoli je to možné. 2. Pokud implementace již odeslaného veřejného rozhraní API musí volat asynchronní kód a blokovat jeho dokončení, musí to provést tímto jednoduchým vzorem:
JoinableTaskFactory.Run(async delegate {
await SomeOperationAsync(...);
});
- Pokud někdy čeká na práci, která byla zahájena dříve, musí být tato práce připojena. Například jedna služba spustí určitou asynchronní práci, která se může později stát synchronně blokující:
JoinableTask longRunningAsyncWork = JoinableTaskFactory.RunAsync(async delegate {
await SomeOperationAsync(...);
});
Pak se později asynchronní práce stane blokující:
longRunningAsyncWork.Join();
nebo možná:
await longRunningAsyncWork;
Mějte však na paměti, že tento dodatečný krok není nutný, pokud se čeká na dokončení okamžitě po zahájení asynchronní operace.
Konstruktory
| Name | Description |
|---|---|
| JoinableTaskContext() |
Inicializuje novou instanci třídy za předpokladu JoinableTaskContext , že aktuální vlákno je hlavní vlákno a Current poskytne prostředky pro přepnutí na hlavní vlákno z jiného vlákna. |
| JoinableTaskContext(Thread, SynchronizationContext) |
Inicializuje novou instanci JoinableTaskContext třídy. |
Vlastnosti
| Name | Description |
|---|---|
| Factory |
Získá továrnu, která vytvoří spojitelné úkoly, které nepatří do spojitelné kolekce úkolů. |
| IsNoOpContext |
Získá hodnotu určující, zda tato instance není přidružena k žádnému hlavnímu vláknu (např. vytvořenou pomocí CreateNoOpContext()). |
| IsOnMainThread |
Získá hodnotu určující, zda volající provádí v hlavním vlákně. |
| IsWithinJoinableTask |
Získá hodnotu určující, zda volající je aktuálně spuštěn v kontextu spojitelné úlohy. |
| MainThread |
Získá hlavní vlákno, které lze sdílet úkoly vytvořené tímto kontextem. |
| NoMessagePumpSynchronizationContext |
SynchronizationContext Získá, který, při použití, potlačuje jakékoli čerpadlo zpráv, které může běžet během synchronních bloků volajícího vlákna. |
Metody
| Name | Description |
|---|---|
| Capture() |
Zachycuje kontext volajícího a serializuje ho jako řetězec, který je vhodný pro aplikaci prostřednictvím následného volání RunAsync(Func<Task>, String, JoinableTaskCreationOptions). |
| CreateCollection() |
Vytvoří kolekci pro úkoly s možností spojení v letu. |
| CreateDefaultFactory() |
Vytvoří továrnu bez objektu JoinableTaskCollection. |
| CreateFactory(JoinableTaskCollection) |
Vytvoří spojitelnou továrnu úloh, která automaticky přidá všechny vytvořené úkoly do kolekce, která se dá spojit společně. |
| CreateNoOpContext() |
Inicializuje novou instanci JoinableTaskContext třídy, která je nakonfigurována pro no-op při volání SwitchToMainThreadAsync(CancellationToken). |
| Dispose() |
Společný kontext, ve kterém se můžou vytvářet spojitelné úkoly a interagovat, aby nedocházelo k zablokování. |
| Dispose(Boolean) |
Odstraní spravované a nespravované prostředky uchovávané touto instancí. |
| GetHangReport() |
Přispívá k datům pro sestavu zablokování. |
| IsMainThreadBlocked() |
Získá hodnotu určující, zda je hlavní vlákno blokováno pro dokončení volajícího. |
| IsMainThreadMaybeBlocked() |
Získá velmi pravděpodobné hodnoty, zda je hlavní vlákno blokováno pro dokončení volajícího. Je méně přesné, když se úloha blokující vlákno uživatelského rozhraní právě spustí a ještě nebyla blokována nebo je řetězec závislostí právě odebrán. Na rozdíl od IsMainThreadBlocked()této implementace je však bez uzamčení a rychlejší ve scénářích s vysokým kolizí. |
| OnFalseHangDetected(TimeSpan, Guid) |
Vyvoláno při dřívější zprávě o zablokování je falešný alarm. |
| OnHangDetected(TimeSpan, Int32, Guid) |
Vyvoláno, když je podezření, že došlo k zablokování zahrnující hlavní vlákno. |
| SuppressRelevance() |
Skryje všechny JoinableTask volajícího je přidružen, dokud vrácená hodnota nebude uvolněna. |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IHangReportContributor.GetHangReport() |
Přispívá k datům pro sestavu zablokování. |
Platí pro
Bezpečný přístup z více vláken
Tento typ je bezpečný pro všechny členy.