언어

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;

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

생성자

Name Description
JoinableTaskContext()

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

JoinableTaskContext(Thread, SynchronizationContext)

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

속성

Name Description
Factory

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

IsNoOpContext

이 인스턴스가 주 스레드(예: 생성된 CreateNoOpContext()스레드)와 연결되지 않았는지 여부를 나타내는 값을 가져옵니다.

IsOnMainThread

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

IsWithinJoinableTask

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

MainThread

이 컨텍스트에서 만든 태스크에서 공유할 수 있는 주 스레드를 가져옵니다.

NoMessagePumpSynchronizationContext

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

메서드

Name Description
Capture()

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

CreateCollection()

플라이트 내 조인 가능한 작업에 대한 컬렉션을 만듭니다.

CreateDefaultFactory()

을 사용하지 않고 팩터리를 JoinableTaskCollection만듭니다.

CreateFactory(JoinableTaskCollection)

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

CreateNoOpContext()

호출 시 no-op 하도록 구성된 클래스의 JoinableTaskContext 새 인스턴스를 초기화합니다 SwitchToMainThreadAsync(CancellationToken).

Dispose()

교착 상태를 방지하기 위해 조인 가능한 작업을 만들고 상호 작용할 수 있는 일반적인 컨텍스트입니다.

Dispose(Boolean)

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

GetHangReport()

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

IsMainThreadBlocked()

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

IsMainThreadMaybeBlocked()

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

OnFalseHangDetected(TimeSpan, Guid)

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

OnHangDetected(TimeSpan, Int32, Guid)

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

SuppressRelevance()

반환된 값이 삭제될 때까지 호출자가 연결된 JoinableTask를 숨깁니다.

명시적 인터페이스 구현

Name Description
IHangReportContributor.GetHangReport()

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

적용 대상

스레드 보안

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