비동기 프로그래밍 패턴Asynchronous programming patterns

.NET에서는 비동기 작업을 수행하기 위한 세 가지 패턴을 제공합니다..NET provides three patterns for performing asynchronous operations:

  • 단일 메서드를 사용하여 비동기 작업 시작과 완료를 나타내는 TAP(작업 기반 비동기 패턴) .Task-based Asynchronous Pattern (TAP), which uses a single method to represent the initiation and completion of an asynchronous operation. TAP는 .NET Framework 4에 도입되었습니다.TAP was introduced in the .NET Framework 4. .NET에서 비동기 프로그램에 권장되는 방법입니다.It's the recommended approach to asynchronous programming in .NET. C#의 asyncawait 키워드와 Visual Basic의 AsyncAwait 연산자는 TAP에 대한 언어 지원을 추가합니다.The async and await keywords in C# and the Async and Await operators in Visual Basic add language support for TAP. 자세한 내용은 TAP(작업 기반 비동기 패턴)을 참조하세요.For more information, see Task-based Asynchronous Pattern (TAP).

  • 비동기 동작을 제공하기 위한 이벤트 기반 레거시 모델인 EAP(이벤트 기반 비동기 패턴) .Event-based Asynchronous Pattern (EAP), which is the event-based legacy model for providing asynchronous behavior. 이 패턴에서는 Async 접미사가 있는 메서드가 필요하며 하나 이상의 이벤트, 이벤트 처리기 대리자 형식 및 EventArg에서 파생된 형식도 필요합니다.It requires a method that has the Async suffix and one or more events, event handler delegate types, and EventArg-derived types. EAP는 .NET Framework 2.0에 도입되었습니다.EAP was introduced in the .NET Framework 2.0. 이 패턴 역시 신규 개발에서는 사용하지 않는 것이 좋습니다.It's no longer recommended for new development. 자세한 내용은 EAP(이벤트 기반 비동기 패턴)를 참조하세요.For more information, see Event-based Asynchronous Pattern (EAP).

  • IAsyncResult 인터페이스를 사용하여 비동기 동작을 제공하는 레거시 모델인 APM(비동기 프로그래밍 모델) 패턴(IAsyncResult 패턴이라고도 함).Asynchronous Programming Model (APM) pattern (also called the IAsyncResult pattern), which is the legacy model that uses the IAsyncResult interface to provide asynchronous behavior. 이 패턴에서는 동기 작업에 BeginEnd 메소드(예를 들어 비동기 쓰기 작업을 구현하는 BeginWriteEndWrite)가 필요합니다.In this pattern, synchronous operations require Begin and End methods (for example, BeginWrite and EndWrite to implement an asynchronous write operation). 신규 개발에서는 이 패턴을 더 이상 사용하지 않는 것이 좋습니다.This pattern is no longer recommended for new development. 자세한 내용은 APM(비동기 프로그래밍 모델)을 참조하세요.For more information, see Asynchronous Programming Model (APM).

패턴 비교Comparison of patterns

위의 세 가지 패턴 모델이 비동기 작업을 수행하는 방법을 빠르게 비교하려는 경우 지정한 오프셋에서부터 지정된 양의 데이터를 제공된 버퍼로 읽어 들이는 Read 메서드를 사용할 수 있습니다.For a quick comparison of how the three patterns model asynchronous operations, consider a Read method that reads a specified amount of data into a provided buffer starting at a specified offset:

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

이 메서드에 해당하는 TAP 코드는 다음의 단일 ReadAsync 메서드를 노출합니다.The TAP counterpart of this method would expose the following single ReadAsync method:

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

그리고 이 메서드에 해당하는 EAP 코드는 다음 형식 및 멤버 집합을 노출합니다.The EAP counterpart would expose the following set of types and members:

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

해당하는 APM 코드는 BeginReadEndRead 메소드를 노출합니다.The APM counterpart would expose the BeginRead and EndRead methods:

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

참고 항목See also