다음을 통해 공유


Await 연산자(Visual Basic)

적용은 Await 비동기 메서드 또는 람다 식에서 피연산자 연산자 바뀌게 작업이 완료 될 때까지 메서드 실행이 일시 중단 합니다.작업 진행 중인 작업을 나타냅니다.

메서드는 Await 사용 해야는 비동기 한정자.사용 하 여 정의 된 이러한 메서드는 Async 한정자를 일반적으로 포함 된 하나 이상의 Await 식 이라고는 비동기 메서드.

[!참고]

Async 및 Await 키워드는 Visual Studio 2012에 도입 되었습니다.해당 버전의 새로운 기능에 대 한 내용은 Visual Studio 2012 의 새로운 기능.

비동기 프로그래밍에 대 한 소개를 참조 하십시오. Async 및 Await를 사용한 비동기 프로그래밍(C# 및 Visual Basic).

일반적으로 적용 하는 작업의 Await 연산자가 구현 하는 메서드 호출의 반환 값은 작업 기반 비동기 패턴, 즉,는 Task 또는 Task<TResult>.

다음 코드에서는 HttpClient 메서드 GetByteArrayAsync 반환 getContentsTask, Task(Of Byte()).작업이 완료 되 면 실제 바이트 배열을 생성 하는 약속입니다.Await 연산자가 적용 된 getContentsTask 의 실행을 일시 중단할 SumPageSizesAsync 까지 getContentsTask 완료 되.호출자에 게 제어를 반환 하는 한편 SumPageSizesAsync.때 getContentsTask 가 완료 된 후에 Await 식을 계산 하는 바이트 배열입니다.

Private Async Function SumPageSizesAsync() As Task

    ' To use the HttpClient type in desktop apps, you must include a using directive and add a 
    ' reference for the System.Net.Http namespace.
    Dim client As HttpClient = New HttpClient() 
    ' . . . 
    Dim getContentsTask As Task(Of Byte()) = client.GetByteArrayAsync(url)
    Dim urlContents As Byte() = Await getContentsTask

    ' Equivalently, now that you see how it works, you can write the same thing in a single line.
    'Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)
    ' . . .
End Function
중요중요

전체 예제를 보려면 연습: Async 및 Await를 사용하여 웹에 액세스(C# 및 Visual Basic)을 참조하십시오.샘플에서 다운로드할 수 개발자 코드 샘플 Microsoft 웹 사이트에서.이 예제에서 AsyncWalkthrough_HttpClient 프로젝트입니다.

경우 Await 반환 하는 메서드 호출의 결과에 적용 되는 Task(Of TResult), 유형에 Await TResult 식인.경우 Await 반환 하는 메서드 호출의 결과에 적용 되는 Task, Await 식 값을 반환 하지 않습니다.다음 예제에서는 차이 보여 줍니다.

' Await used with a method that returns a Task(Of TResult).
Dim result As TResult = Await AsyncMethodThatReturnsTaskTResult()

' Await used with a method that returns a Task.
Await AsyncMethodThatReturnsTask()

Await 식 또는 문에서 실행 하는 스레드가 차단 되지 않습니다.대신 컴파일러가 비동기 메서드의 나머지를 후에 서명 하 게 된 Await 을 바뀌게 하는 연속 식.컨트롤은 다음 비동기 메서드 호출자에 게 반환합니다.작업이 완료 되 면 실행 했던 비동기 메서드 이력서와 연속 작업을 호출 합니다.

Await 식으로 표시 되는 바로 바깥쪽 메서드 또는 람다 식의 본문에만 발생할 수 있는 Async 한정자.용어 Await 해당 컨텍스트에서만에서 키워드 역할을 합니다.다른 곳으로 식별자로 해석 됩니다.비동기 메서드 또는 람다 식 안에 Await 식에는 쿼리 식에서 수행할 수 없습니다는 catch 또는 finally 블록은 Try...Catch...마지막 문에서 루프 제어 변수 식의는 For 또는 For Each 루프 또는 본문에는 SyncLock 문.

예외

대부분의 비동기 메서드 반환 된 Task 또는 Task<TResult>.반환 된 작업의 속성의 상태와 작업 완료 여부, 비동기 메서드는 예외를 발생 시킨 여부 취소 되었습니다 및 최종 결과 기록에 대 한 정보를 수행 합니다.Await 연산자는 속성에 액세스 합니다.

예외를 일으키는 작업 반환 비동기 메서드 기다립니다 경우는 Await 연산자는 예외를 다시 throw 합니다.

취소 된 작업 반환 비동기 메서드 기다립니다 경우는 Await 연산자를 다시 throw 된 OperationCanceledException.

단일 작업 오류가 상태에 여러 예외를 반영할 수 있습니다.예를 들어, 작업 결과에 대 한 호출의 수 Task.WhenAll.이러한 작업을 기다립니다 때 await 작업 예외 중 하나만 다시 throw 합니다.그러나 예외를 다시 throw 됩니다 예측할 수 없습니다.

비동기 메서드를 처리 하는 오류에 대 한 예제를 참조 하십시오. Try...Catch...Finally 문(Visual Basic).

예제

Windows Forms 예제를 보여 줍니다 Await 는 비동기 메서드의 WaitAsynchronouslyAsync.해당 메서드의 동작과 동작을 반대로 WaitSynchronously.없이 Await 연산자를 WaitSynchronously 의 사용에도 불구 하 고 동기적으로 실행의 Async 한정자의 정의 및 호출을 Thread.Sleep 해당 본문에.

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' Call the method that runs asynchronously.
    Dim result As String = Await WaitAsynchronouslyAsync()

    ' Call the method that runs synchronously.
    'Dim result As String = Await WaitSynchronously()

    ' Display the result.
    TextBox1.Text &= result
End Sub

' The following method runs asynchronously. The UI thread is not
' blocked during the delay. You can move or resize the Form1 window 
' while Task.Delay is running.
Public Async Function WaitAsynchronouslyAsync() As Task(Of String)
    Await Task.Delay(10000)
    Return "Finished"
End Function

' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while Thread.Sleep
' is running because the UI thread is blocked.
Public Async Function WaitSynchronously() As Task(Of String)
    ' Import System.Threading for the Sleep method.
    Thread.Sleep(10000)
    Return "Finished"
End Function

참고 항목

작업

연습: Async 및 Await를 사용하여 웹에 액세스(C# 및 Visual Basic)

참조

Async(Visual Basic)

개념

Async 및 Await를 사용한 비동기 프로그래밍(C# 및 Visual Basic)