JoinableTaskContext 클래스

정의

조인 가능한 작업을 생성하고 상호 작용으로 교착 상태를 방지할 수 있는 일반 컨텍스트입니다.

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
상속
JoinableTaskContext
구현

설명

JoinableTasks를 사용하거나 상호 작용할 때 엄격하게 따라야 하는 세 가지 규칙이 있습니다. 1. 메서드에 특정 스레드 아파트 요구 사항(STA 또는 MTA)이 있는 경우 a) 비동기 서명을 사용하고 호환 스레드에서 원래 호출되지 않은 경우 해당 스레드에 비동기적으로 마샬링해야 합니다. 기본 스레드로 전환하는 권장 방법은 다음과 같습니다.

await JoinableTaskFactory.SwitchToMainThreadAsync();

b) 동기 서명을 가지고 잘못된 스레드에서 호출되면 예외를 throw합니다. 특히 다른 스레드에 작업을 동기적으로 마샬링할 수 있는 메서드는 없습니다(해당 작업이 수행되는 동안 차단). 일반적으로 동기 블록은 가능하면 피해야 합니다. 2. 이미 제공된 공용 API의 구현이 비동기 코드를 호출하고 완료를 차단해야 하는 경우 다음과 같은 간단한 패턴을 따라야 합니다.

JoinableTaskFactory.Run(async delegate {
    await SomeOperationAsync(...);
});
  1. 이전에 시작된 작업을 기다리는 경우 해당 작업을 조인해야 합니다. 예를 들어 한 서비스는 나중에 동기적으로 차단될 수 있는 비동기 작업을 시작합니다.
JoinableTask longRunningAsyncWork = JoinableTaskFactory.RunAsync(async delegate {
    await SomeOperationAsync(...);
});

그런 다음 나중에 비동기 작업이 차단됩니다.

longRunningAsyncWork.Join();

또는 다음을 수행할 수 있습니다.

await longRunningAsyncWork;

그러나 비동기 작업을 시작한 직후 대기하는 경우 이 추가 단계가 필요하지 않습니다.

생성자

JoinableTaskContext()

현재 스레드가 기본 스레드라고 가정하고 클래스의 JoinableTaskContext 새 instance 초기화하고 Current 다른 스레드에서 기본 스레드로 전환하는 수단을 제공합니다.

JoinableTaskContext(Thread, SynchronizationContext)

JoinableTaskContext 클래스의 새 인스턴스를 초기화합니다.

속성

Factory

조인 가능 작업 컬렉션에 속하지 않는 조인 가능 작업을 만드는 팩터리를 가져옵니다.

IsOnMainThread

호출자가 기본 스레드에서 실행 중인지 여부를 나타내는 값을 가져옵니다.

IsWithinJoinableTask

호출자가 현재 조인 가능한 작업의 컨텍스트 내에서 실행 중인지 여부를 나타내는 값을 가져옵니다.

MainThread

이 컨텍스트로 생성한 작업이 공유할 수 있는 주 스레드를 가져옵니다.

NoMessagePumpSynchronizationContext

SynchronizationContext 가 적용될 때 호출 스레드의 동기 블록 중에 실행할 수 있는 메시지 펌프를 표시하지 않는 을 가져옵니다.

메서드

Capture()

호출자의 컨텍스트를 캡처하고 에 대한 후속 호출 RunAsync(Func<Task>, String, JoinableTaskCreationOptions)을 통해 애플리케이션에 적합한 문자열로 serialize합니다.

CreateCollection()

진행 중인 조인 가능 작업에 대한 컬렉션을 만듭니다.

CreateDefaultFactory()

JoinableTaskCollection 없이 팩터리를 만듭니다.

CreateFactory(JoinableTaskCollection)

생성된 모든 작업을 함께 조인할 수 있는 컬렉션으로 자동으로 추가하는 조인 가능 작업 팩터리를 만듭니다.

Dispose()

조인 가능한 작업을 생성하고 상호 작용으로 교착 상태를 방지할 수 있는 일반 컨텍스트입니다.

Dispose(Boolean)

이 instance 보유한 관리되는 리소스와 관리되지 않는 리소스를 삭제합니다.

GetHangReport()

중단 보고서에 대한 데이터를 적용합니다.

IsMainThreadBlocked()

호출자의 완료를 위해 기본 스레드가 차단되었는지 여부를 나타내는 값을 가져옵니다.

IsMainThreadMaybeBlocked()

호출자의 완료를 위해 기본 스레드가 차단되는지 여부에 관계없이 매우 가능성이 높은 값을 가져옵니다. UI 스레드 차단 작업이 막 시작되고 아직 차단되지 않았거나 종속성 체인이 제거된 경우 정확도가 떨어집니다. 그러나 와 달리 IsMainThreadBlocked()이 구현은 잠금이 없으며 높은 경합 시나리오에서 더 빠릅니다.

OnFalseHangDetected(TimeSpan, Guid)

이전 중단 보고서가 거짓 경보일 때 호출됩니다.

OnHangDetected(TimeSpan, Int32, Guid)

기본 스레드와 관련된 중단이 발생한 것으로 의심되는 경우 호출됩니다.

SuppressRelevance()

반환된 값이 삭제될 때까지 호출자가 관련되어 있는 모든 JoinableTask를 숨깁니다.

명시적 인터페이스 구현

IHangReportContributor.GetHangReport()

중단 보고서에 대한 데이터를 적용합니다.

적용 대상

스레드 보안

이 형식은 모든 멤버에 대해 스레드로부터 안전합니다.