JoinableTaskContext Klasa

Definicja

Wspólny kontekst, w którym można tworzyć zadania do przyłączenia, i korzystać z nich, aby uniknąć zakleszczeń.

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
Dziedziczenie
JoinableTaskContext
Implementuje

Uwagi

Istnieją trzy reguły, które powinny być ściśle używane podczas korzystania z JoinableTasks lub współpracy z nimi: 1. Jeśli metoda ma pewne wymagania apartamentu wątku (STA lub MTA), musi to być: a) mieć sygnaturę asynchroniczną i asynchronicznie kierować do odpowiedniego wątku, jeśli nie zostało ono pierwotnie wywołane w zgodnym wątku. Zalecanym sposobem przełączenia się do głównego wątku jest:

await JoinableTaskFactory.SwitchToMainThreadAsync();

b) ma sygnaturę synchroniczną i zgłasza wyjątek w przypadku wywołania w niewłaściwym wątku. W szczególności żadna metoda nie może synchronicznie zorganizować pracy w innym wątku (blokując, gdy ta operacja jest wykonywana). W miarę możliwości należy unikać bloków synchronicznych. 2. Gdy implementacja już wysłanego publicznego interfejsu API musi wywołać kod asynchroniczny i zablokować jego zakończenie, musi to zrobić, wykonując następujące proste wzorce:

JoinableTaskFactory.Run(async delegate {
    await SomeOperationAsync(...);
});
  1. Jeśli kiedykolwiek oczekują na pracę, która została uruchomiona wcześniej, ta służbowa musi być przyłączona. Na przykład jedna usługa uruchamia kilka operacji asynchronicznych, które mogą później blokować się synchronicznie:
JoinableTask longRunningAsyncWork = JoinableTaskFactory.RunAsync(async delegate {
    await SomeOperationAsync(...);
});

Następnie w późniejszym czasie działanie asynchroniczne zostanie zablokowane:

longRunningAsyncWork.Join();

lub prawdopodobnie:

await longRunningAsyncWork;

Należy jednak pamiętać, że ten dodatkowy krok nie jest konieczny, gdy oczekiwanie jest wykonywane natychmiast po zakończeniu operacji asynchronicznej.

Konstruktory

JoinableTaskContext()

Inicjuje nowe wystąpienie JoinableTaskContext klasy, przy założeniu, że bieżący wątek jest głównym wątkiem i Current umożliwi przełączenie się do głównego wątku z innego wątku.

JoinableTaskContext(Thread, SynchronizationContext)

Inicjuje nowe wystąpienie klasy JoinableTaskContext.

Właściwości

Factory

Pobiera fabrykę, która tworzy zadania do dołączenia, które nie należą do kolekcji zadań do przyłączenia.

IsOnMainThread

Pobiera wartość wskazującą, czy obiekt wywołujący jest wykonywany w wątku głównym.

IsWithinJoinableTask

Pobiera wartość wskazującą, czy obiekt wywołujący jest aktualnie uruchomiony w kontekście zadania do przyłączenia.

MainThread

Pobiera główny wątek, który może być współużytkowany przez zadania utworzone przez ten kontekst.

NoMessagePumpSynchronizationContext

Pobiera SynchronizationContext , który, gdy jest stosowany, pomija wszystkie pompy komunikatów, które mogą być uruchamiane w blokach synchronicznych wątku wywołującego.

Metody

CreateCollection()

Tworzy kolekcję dla zadań do przyłączania do usługi in-lot.

CreateDefaultFactory()

Tworzy fabrykę bez JoinableTaskCollection .

CreateFactory(JoinableTaskCollection)

Tworzy fabrykę zadań do przyłączenia, która automatycznie dodaje wszystkie utworzone zadania do kolekcji, która może być wspólnie przyłączona.

Dispose()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

Dispose(Boolean)

Usuwa zasoby zarządzane i niezarządzane przechowywane przez to wystąpienie.

GetHangReport()

Tworzy dane dla raportu zawieszenia.

IsMainThreadBlocked()

Pobiera wartość wskazującą, czy główny wątek jest zablokowany dla ukończenia obiektu wywołującego.

OnFalseHangDetected(TimeSpan, Guid)

Wywoływane, gdy wcześniejszy raport zawieszenia jest fałszywy.

OnHangDetected(TimeSpan, Int32, Guid)

Wywoływana, gdy podejrzewa się, że wystąpiło zawieszenie dotyczące wątku głównego.

SuppressRelevance()

Ukrywa każdy JoinableTask, z którym skojarzony jest obiekt wywołujący do momentu usunięcia zwróconej wartości.

Jawne implementacje interfejsu

IHangReportContributor.GetHangReport()

Tworzy dane dla raportu zawieszenia.

Dotyczy

Bezpieczeństwo wątkowe

Ten typ jest bezpieczny dla wątków dla wszystkich elementów członkowskich.