다음을 통해 공유


비동기 프로그래밍 패턴

.NET은 비동기 작업을 수행하기 위한 세 가지 패턴을 제공합니다.

  • 단일 메서드를 사용하여 비동기 작업의 시작 및 완료를 나타내는 TAP(작업 기반 비동기 패턴)입니다. TAP은 .NET Framework 4에서 도입되었습니다. .NET에서 비동기 프로그래밍에 권장되는 방법입니다. C# 의 비동기await 키워드와 Visual Basic의 AsyncAwait 연산자는 TAP에 대한 언어 지원을 추가합니다. 자세한 내용은 TAP(작업 기반 비동기 패턴)을 참조하세요.

  • 비동기 동작을 제공하기 위한 이벤트 기반 레거시 모델인 EAP(이벤트 기반 비동기 패턴)입니다. 접미사와 하나 이상의 이벤트, 이벤트 처리기 대리자 형식 및 Async파생 형식이 있는 메서드 EventArg 가 필요합니다. EAP는 .NET Framework 2.0에서 도입되었습니다. 새 개발에는 더 이상 권장되지 않습니다. 자세한 내용은 EAP(이벤트 기반 비동기 패턴)를 참조하세요.

  • APM(비동기 프로그래밍 모델) 패턴(패턴이라고도 함 IAsyncResult )은 인터페이스를 사용하여 IAsyncResult 비동기 동작을 제공하는 레거시 모델입니다. 이 패턴에서는 비동기 작업에 메서드Begin 및 메서드End가 필요합니다(예를 들어, 비동기 쓰기 작업을 구현하려면 BeginWriteEndWrite 메서드가 필요합니다). 이 패턴은 더 이상 새 개발에 권장되지 않습니다. 자세한 내용은 APM(비동기 프로그래밍 모델)을 참조하세요.

패턴 비교

세 패턴이 비동기 작업을 모델링하는 방법을 빠르게 비교하려면 지정된 양의 데이터를 지정된 오프셋에서 시작하는 제공된 버퍼로 읽는 메서드를 고려 Read 합니다.

public class MyClass  
{  
    public int Read(byte [] buffer, int offset, int count);  
}  

이 메서드의 TAP 대응 메서드는 다음 단일 ReadAsync 메서드를 노출합니다.

public class MyClass  
{  
    public Task<int> ReadAsync(byte [] buffer, int offset, int count);  
}  

EAP 대응 항목은 다음과 같은 형식 및 멤버 집합을 노출합니다.

public class MyClass  
{  
    public void ReadAsync(byte [] buffer, int offset, int count);  
    public event ReadCompletedEventHandler ReadCompleted;  
}  

APM 대응 항목은 BeginReadEndRead 메서드를 제공합니다.

public class MyClass  
{  
    public IAsyncResult BeginRead(  
        byte [] buffer, int offset, int count,
        AsyncCallback callback, object state);  
    public int EndRead(IAsyncResult asyncResult);  
}  

참고하십시오