JoinableTaskContext 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
교착 상태를 방지하기 위해 조인 가능한 작업을 만들고 상호 작용할 수 있는 일반적인 컨텍스트입니다.
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(...);
});
- 이전에 시작된 작업을 기다리는 경우 해당 작업을 조인해야 합니다. 예를 들어 한 서비스는 나중에 동기적으로 차단될 수 있는 일부 비동기 작업을 시작합니다.
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() |
중단 보고서에 대한 데이터를 제공합니다. |
적용 대상
스레드 보안
이 형식은 모든 멤버에 대해 스레드로부터 안전합니다.