다음을 통해 공유


Async(Visual Basic)

Async 한정자를 나타내는 해당 메서드 또는 람다 식 비동기적으로 수정 된다는 것입니다.이러한 방법으로 참조 하는 비동기 메서드.

비동기 메서드는 호출자의 스레드를 차단 하지 않고 잠재적으로 장기 실행 작업을 수행 하는 편리한 방법을 제공 합니다.비동기 메서드의 호출자가 비동기 메서드 완료를 기다리지 않고 작업을 계속 합니다.

[!참고]

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

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

다음 예제에서는 비동기 메서드의 구조를 보여 줍니다.규칙에 따라 비동기 메서드 이름은 "Async"의 끝

Public Async Function ExampleMethodAsync() As Task(Of Integer)
    ' . . .

    ' At the Await expression, execution in this method is suspended and,
    ' if AwaitedProcessAsync has not already finished, control returns
    ' to the caller of ExampleMethodAsync. When the awaited task is 
    ' completed, this method resumes execution. 
    Dim exampleInt As Integer = Await AwaitedProcessAsync()

    ' . . .

    ' The return statement completes the task. Any method that is 
    ' awaiting ExampleMethodAsync can now get the integer result.
    Return exampleInt
End Function

일반적으로 메서드를 수정 하는 Async 키워드가 하나 이상 포함 되어 있는 Await 식 또는 문.첫 번째에 도달할 때까지 메서드를 동기적으로 실행 Await, 일시 바뀌게 작업이 완료 될 때까지 어떤 지점에서 중단 합니다.한편 컨트롤 메서드 호출자에 게 반환 됩니다.메서드가 없는 경우는 Await 식 또는 문, 일시 중단 되지 않은 메서드와 같이 동기 메서드를 실행 합니다.비동기 메서드를 포함 하지 않는 경고 메시지가 컴파일러 경고 Await 경우 오류를 나타낼 수 있습니다 때문에.자세한 내용은 컴파일러 오류.

Async 키워드는 예약 되지 않은 키워드입니다.람다 식 또는 메서드를 수정 하면 키워드입니다.다른 모든 컨텍스트에서이 식별자로 해석 됩니다.

반환 유형

하는 비동기 메서드는 Sub 프로시저 또는 함수 프로시저의 반환 형식을 갖는 Task 또는 Task<TResult>.모든 메서드를 선언할 수 없습니다 ByRef 매개 변수입니다.

지정한 Task(Of TResult) 비동기 메서드의 반환 형식에 대 한 경우는 반환 메서드의 문이 TResult 형식의 피연산자가 있습니다.사용 하 여 Task 메서드가 완료 될 때 의미 있는 값이 없는 반환 된 경우.즉, 호출 하는 메서드를 반환는 Task, 하지만 때의 Task 완료 되 고 모든 Await 대기 중이 문을 Task 결과 값을 생성 하지 않습니다.

Async 서브루틴은 주로 이벤트 처리기를 정의 하는 데 사용 위치는 Sub 프로시저가 필요 합니다.호출자는 async 서브루틴의 해당 기다립니다 수 없습니다 및 메서드에서 throw 되는 예외를 catch 할 수 없습니다.

자세한 내용과 예제를 보려면 비동기 반환 형식(C# 및 Visual Basic)을 참조하십시오.

예제

다음 예제에서는 비동기 이벤트 처리기, 비동기 람다 식 및 비동기 메서드를 보여 줍니다.이러한 요소를 사용 하는 전체 예제를 보려면 연습: Async 및 Await를 사용하여 웹에 액세스(C# 및 Visual Basic).연습 코드를 다운로드할 수 있습니다 개발자 코드 샘플.

' An event handler must be a Sub procedure.
Async Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click
    textBox1.Clear()
    ' SumPageSizesAsync is a method that returns a Task.
    Await SumPageSizesAsync()
    textBox1.Text = vbCrLf & "Control returned to button1_Click."
End Sub


' The following async lambda expression creates an equivalent anonymous
' event handler.
AddHandler button1.Click, Async Sub(sender, e)
                              textBox1.Clear()
                              ' SumPageSizesAsync is a method that returns a Task.
                              Await SumPageSizesAsync()
                              textBox1.Text = vbCrLf & "Control returned to button1_Click."
                          End Sub 


' The following async method returns a Task(Of T).
' A typical call awaits the Byte array result:
'      Dim result As Byte() = Await GetURLContents("https://msdn.com")
Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())

    ' The downloaded resource ends up in the variable named content.
    Dim content = New MemoryStream()

    ' Initialize an HttpWebRequest for the current URL.
    Dim webReq = CType(WebRequest.Create(url), HttpWebRequest)

    ' Send the request to the Internet resource and wait for
    ' the response.
    Using response As WebResponse = Await webReq.GetResponseAsync()
        ' Get the data stream that is associated with the specified URL.
        Using responseStream As Stream = response.GetResponseStream()
            ' Read the bytes in responseStream and copy them to content.  
            ' CopyToAsync returns a Task, not a Task<T>.
            Await responseStream.CopyToAsync(content)
        End Using
    End Using

    ' Return the result as a byte array.
    Return content.ToArray()
End Function

참고 항목

작업

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

참조

Await 연산자(Visual Basic)

AsyncStateMachineAttribute

개념

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