ValueTask<TResult> 구조체
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
Task<TResult> 및 TResult
를 래핑하는 값 형식을 제공합니다. 이 중 하나만 사용됩니다.
generic <typename TResult>
public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask<TResult>>
public readonly struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
public struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
type ValueTask<'Result> = struct
Public Structure ValueTask(Of TResult)
Implements IEquatable(Of ValueTask(Of TResult))
형식 매개 변수
- TResult
결과입니다.
- 상속
- 구현
-
IEquatable<ValueTask<TResult>>
설명
인스턴스가 ValueTask<TResult> 대기 중이거나 usingAsTask으로 Task<TResult> 변환될 수 있습니다. 인스턴스는 ValueTask<TResult> 한 번만 대기할 수 있으며, 인스턴스가 완료될 때까지 소비자는 읽 Result 지 않을 수 있습니다. 이러한 제한 사항이 허용되지 않는 경우 호출AsTask하여 ValueTask<TResult> 변환 Task<TResult> 합니다.
인스턴스에서 다음 작업을 수행 ValueTask<TResult> 해서는 안 됩니다.
- 인스턴스를 여러 번 대기합니다.
- 여러 번 호출 AsTask 합니다.
.GetAwaiter().GetResult()
작업이.Result
아직 완료되지 않은 경우 또는 여러 번 사용.- 이러한 기술 중 하나 이상을 사용하여 인스턴스를 사용합니다.
위의 작업을 수행하면 결과가 정의되지 않습니다.
메서드는 작업 결과를 동기적으로 사용할 수 있을 가능성이 높고 호출 빈도를 너무 자주 호출하여 각 호출에 대해 새 Task<TResult> 항목을 할당하는 데 드는 비용이 매우 많이 드는 경우 이 값 형식의 인스턴스를 반환할 수 있습니다.
대신에 a ValueTask<TResult> 를 사용하는 단점이 있습니다 Task<TResult>. 예를 들어 ValueTask<TResult> 성공적인 결과를 동기적으로 사용할 수 있는 경우 할당을 방지하는 데 도움이 될 수 있지만 여러 필드도 포함하는 반면 Task<TResult> 참조 형식은 단일 필드입니다. 즉, 메서드에서 반환 ValueTask<TResult> 하면 더 많은 데이터가 복사됩니다. 또한 비동기 메서드 내에서 메서드를 반환 ValueTask<TResult> 하는 메서드가 대기하는 경우 단일 참조 대신 여러 필드가 포함된 구조체를 저장해야 하므로 해당 비동기 메서드의 상태 컴퓨터가 더 커집니다.
await ValueTask<TResult> 를 사용하여 비동기 작업의 결과를 사용하는 것 이외의 용도의 경우 더 많은 할당이 필요한 더 복잡해질 수 있습니다. 예를 들어 캐시된 작업이 있는 작업을 일반적인 결과로 반환 Task<TResult> 하거나 반환할 수 있는 메서드를 고려해 ValueTask<TResult>보세요. 결과의 소비자가 메서드와 같은 WhenAnyWhenAll ValueTask<TResult> 메서드로 사용하려는 경우 먼저 usingAsTask로 Task<TResult> 변환 Task<TResult> 되어야 하므로 캐시 Task<TResult> 된 항목이 처음에 사용되었으면 피할 수 있는 할당이 발생합니다.
따라서 비동기 메서드에 대한 기본 선택은 a Task 또는 Task<TResult>. 성능 분석이 가치가 ValueTask<TResult> Task<TResult>있음을 증명하는 경우에만 . 일반 버전이 아닌 버전은 ValueTask 대부분의 시나리오에 권장되지 않습니다. 이 속성은 CompletedTask 완료를 반환하는 메서드가 동기적으로 성공적으로 완료된 경우 성공적으로 완료된 싱글톤을 Task 다시 전달하는 데 사용해야 합니다.
참고
형식의 ValueTask<TResult> 사용은 C# 7.0부터 지원되며 Visual Basic 버전에서는 지원되지 않습니다.
참고
매개 변수가 없는 생성자 또는 default(ValueTask<TResult>)
구문(초기화되지 않은 구조체)으로 만든 인스턴스는 동기적으로 성공적으로 완료된 작업을 나타냅니다 default(TResult)
.
생성자
ValueTask<TResult>(IValueTaskSource<TResult>, Int16) |
작업을 나타내는 IValueTaskSource<TResult>개체를 사용하여 ValueTask<TResult> 클래스의 새 인스턴스를 초기화합니다. |
ValueTask<TResult>(Task<TResult>) |
작업을 나타내는 제공된 작업을 사용하여 ValueTask<TResult> 클래스의 새 인스턴스를 초기화합니다. |
ValueTask<TResult>(TResult) |
성공한 작업의 제공된 결과를 사용하여 ValueTask<TResult> 클래스의 새 인스턴스를 초기화합니다. |
속성
IsCanceled |
이 개체가 취소된 작업을 나타내는지를 지정하는 값을 가져옵니다. |
IsCompleted |
이 개체가 완료된 작업을 나타내는지를 지정하는 값을 가져옵니다. |
IsCompletedSuccessfully |
이 개체가 성공적으로 완료된 작업을 나타내는지를 지정하는 값을 가져옵니다. |
IsFaulted |
이 개체가 실패한 작업을 나타내는지를 지정하는 값을 가져옵니다. |
Result |
결과를 가져옵니다. |
메서드
AsTask() |
이 ValueTask<TResult>를 나타내는 Task<TResult> 개체를 검색합니다. |
ConfigureAwait(Boolean) |
이 값에 awaiter를 구성합니다. |
CreateAsyncMethodBuilder() |
비동기 메서드와 함께 사용할 메서드 작성기를 만듭니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. |
Equals(ValueTask<TResult>) |
지정된 ValueTask<TResult> 개체가 현재 ValueTask<TResult> 개체와 같은지 여부를 확인합니다. |
GetAwaiter() |
이 값에 awaiter를 만듭니다. |
GetHashCode() |
이 인스턴스의 해시 코드를 반환합니다. |
Preserve() |
향후 어떤 시점에서든 사용할 수 있는 ValueTask<TResult>를 가져옵니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. |
연산자
Equality(ValueTask<TResult>, ValueTask<TResult>) |
두 값이 같은지 여부를 비교합니다. |
Inequality(ValueTask<TResult>, ValueTask<TResult>) |
두 ValueTask<TResult> 값이 서로 같지 않은지 확인합니다. |