서문
블로거는 단순히 자신이 게시한 비동기 기사를 세어보았는데, 간헐적으로 벌써 8개가 있습니다. 이번에는 비동기의 반환 유형을 사용하고 싶습니다. 예를 들어, 혼자 이야기하세요.
비동기 메서드에는 Task
언제 어떤 반환 유형을 사용해야 합니까? 특정 상황에 따라 구체적인 분석이 필요합니다. 잘못 사용하면 프로그램의 실행 결과가 원하는 대로 나오지 않을 수도 있습니다. 상황에 따라 다른 반환 유형을 선택하는 방법에 대해 이야기해 보겠습니다.
Task
[기억] async 키워드를 추가할 때 후속 작업에 사용할 개체를 반환해야 하므로 Task
Task
다음 예제에서 GetDateTimeAsync 비동기 메서드에는 현재 시간을 반환하는 return 문이 포함되어 있습니다. 따라서 메소드 선언은 Task
async Task<DateTime> GetDateTimeAsync() { //Task.FromResult 是一个占位符,类型为 DateTime return await Task.FromResult(DateTime.Now); }
GetDateTimeAsync 메서드 호출:
async Task CallAsync() { //在另一个异步方法的调用方式 DateTime now = await GetDateTimeAsync(); }
GetDateTimeAsync가 wait 식 내에서 호출되면 wait 식은 GetDateTimeAsync에서 반환된 작업에 저장된 DateTime 유형 값을 검색합니다.
async Task CallAsync() { //在另一个异步方法的调用方式 //DateTime now = await GetDateTimeAsync(); //换种方式调用 Task<DateTime> t = GetDateTimeAsync(); DateTime now = await t; }
GetDateTimeAsync 메서드는 CallAsync 메서드를 통해 호출되며, 즉시 대기하지 않는 GetDateTimeAsync 메서드에 대한 호출은 Task
이번에는 다양한 변수를 보여주므로 결과를 직접 비교할 수 있습니다.
async Task CallAsync() { //在另一个异步方法的调用方式 DateTime now = await GetDateTimeAsync(); //换种方式调用 Task<DateTime> t = GetDateTimeAsync(); DateTime now2 = await t; //输出的结果对比 Console.WriteLine($"now: {now}"); Console.WriteLine($"now2: {now2}"); Console.WriteLine($"t.Result: {t.Result}"); }
[참고] Result 속성은 잠긴 속성입니다. 작업이 완료되기 전에 액세스하려고 하면 작업이 완료되고 값을 사용할 수 있을 때까지 현재 활성 스레드가 차단됩니다. 대부분의 경우 속성에 직접 액세스하는 대신 Wait를 사용하여 속성 값에 액세스해야 합니다.
태스크
return 문을 포함하지 않거나 피연산자를 반환하지 않는 return 문을 포함하는 비동기 메서드의 반환 유형은 일반적으로 Task입니다. 비동기적으로 실행되도록 작성된 경우 이러한 메서드는 무효 반환 메서드가 됩니다. 비동기 메서드에서 Task 반환 형식을 사용하는 경우 호출 메서드는 호출된 비동기 메서드가 완료될 때까지 호출자의 완료를 일시 중지하기 위해 wait 연산자를 사용할 수 있습니다.
예 보기:
async Task DelayAsync() { //Task.Delay 是一个占位符,用于假设方法正处于工作状态。 await Task.Delay(100); Console.WriteLine("OK!"); }
wait 식 대신 wait 문을 사용하여 DelayAsync 메서드를 호출하고 기다립니다. 이는 void를 반환하는 메서드에 대한 호출 문과 유사합니다. 이 경우 Wait 연산자를 적용해도 값이 생성되지 않습니다.
DelayAsync를 호출하는 예를 살펴보세요.
//调用和等待方法在同一声明中 await DelayAsync();
이제 호출과 대기를 분리하는 방법을 사용합니다.
//分离 Task delayTask = DelayAsync(); await delayTask; void
void 반환 유형은 void 반환 유형이 필요한 이벤트 핸들러에서 주로 사용됩니다. void 반환 유형은 void를 반환하는 메서드 또는 호출 후 잊어버리기 활동으로 분류될 수 있는 활동을 수행하는 메서드에 대한 대안으로 사용될 수도 있습니다. 그러나 void를 반환하는 비동기 메서드를 기다릴 수 없으므로 가능할 때마다 Task를 반환해야 합니다. 이러한 메서드의 호출자는 호출된 비동기 메서드가 완료될 때까지 기다리지 않고 완료만 진행할 수 있으며, 호출자는 비동기 메서드에 의해 생성된 모든 값이나 예외로부터 독립되어야 합니다.
void를 반환하는 비동기 메서드 호출자는 메서드에서 발생한 예외를 포착할 수 없으며 이러한 처리되지 않은 예외로 인해 애플리케이션 오류가 발생할 수 있습니다. Task 또는 Task
이제 예외도 Wait를 사용할 수 있습니다. "C#의 과거와 현재를 되돌아보기 - C# 6.0의 새로운 구문 기능 확인"으로 이동하세요.
void 반환 값 예:
private async void button1_Click(object sender, EventArgs e) { //启动进程并等待完成 await Task.Delay(100); }
위는 Async 반환 유형에 대한 C# 기본 검토입니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. !