태스크 클래스
작업 클래스는 .NET 4.0 이후 제공된 비동기 연산 추상화로, System.Threading.Tasks.Task로 가는 전체 경로를 포함합니다.
Task 클래스는 반환 값이 없는 비동기 연산을 나타내는 데 사용되며, 반환 값이 있는 비동기 연산의 경우, 작업 클래스의 서브클래스 Task를 사용해야 합니다<TResult>. 작업 클래스가 생성한 작업은 스레드 풀에 추가됩니다.
<TResult>Task/Task 클래스의 주요 구성 요소는 다음과 같습니다:
작업이 생성되면 Start() 메서드를 사용하여 시작할 수 있습니다:
실제 개발에서는 작업 클래스의 정적 메서드 Run() 또는 팩토리 클래스 TaskFactory의 멤버 메서드 StartNew()가 새로운 작업을 생성하고 시작하는 데 더 자주 사용됩니다.
Task 클래스에서 흔히 사용하는 방법들:
async/wait(기분 변경) 키워드
C# 5.0은 비동기 및 wait(비동기) 및 wait(wait) 키워드를 도입하여 언어 수준에서 동시성 지원을 개선했습니다.
비동기는 비동기 메서드를 표시하는 데 사용됩니다: 비동기 키워드는 문맥 키워드로, 메서드와 람다를 수정할 때만 키워드로 취급되고, 다른 영역에서는 식별자로 취급됩니다. 비동기 키워드는 정적 메서드를 표시할 수 있지만, 진입 지점(Main() 메서드)은 표시할 수 없습니다.
비동기로 태그된 메서드의 반환 값은 <TResult>Task, Task, 또는 void 중 하나여야 합니다. await는 비동기 방법의 결과를 기다리는 데 사용됩니다:
wait(기다리기) 키워드 역시 맥락 키워드이며, 비동기 태깅 방식에서만 키워드로 간주됩니다. wait(wait) 키워드는 비동기 메서드 앞에 사용할 수 있고, <TResult>Task와 Task는 비동기 작업 실행 종료를 기다리는 데 사용할 수 있습니다. 간단한 비동기 메서드 구조는 다음과 같습니다:
메서드가 비동기 키워드로 표시되어 있는 것이 아니라, 비동기 메서드이며, 비동기 메서드 내에 직접 나타나는 문장들도 동기적으로 실행됩니다,비동기적으로 실행되는 콘텐츠는 Task 클래스를 사용하여 실행되어야 합니다。 실제로 wait(await) 문이 없는 비동기 메서드는 동기식으로 실행되며, 이 시점에서 컴파일러가 경고를 표시합니다.
간단한 예로, async/await를 사용해 화면에 동시에 콘텐츠를 출력하는 방법:
출력: (모노 4.4.0 & & ArchLinux x64)
위 프로그램에서 async 키워드 태그가 지정된 비동기 메서드에서는 await를 사용하기 전의 코드가 동기적으로 실행되고, await이 호출된 후에는 나머지 코드가 별도의 스레드에서 비동기적으로 실행된다는 것을 쉽게 알 수 있습니다.
|