> 백엔드 개발 > C++ > ASP.NET에서 뛰어난 작업을 처리할 때 Async Void 및 Async 작업 메서드는 어떻게 다릅니까?

ASP.NET에서 뛰어난 작업을 처리할 때 Async Void 및 Async 작업 메서드는 어떻게 다릅니까?

Mary-Kate Olsen
풀어 주다: 2025-01-04 01:43:41
원래의
864명이 탐색했습니다.

How Do Async Void and Async Task Methods Differ in Handling Outstanding Operations in ASP.NET?

Async Void 및 ASP.Net의 Async 작업에서 뛰어난 작업 수

ASP.Net 애플리케이션에서 async void 방법은 미해결 작업을 처리하는 비동기 작업 메서드입니다. 이러한 구별로 인해 async void에서는 다음과 같은 예외가 발생할 수 있지만 async 작업에서는 그렇지 않습니다.

System.InvalidOperationException: An asynchronous module or handler completed while an asynchronous operation was still pending
로그인 후 복사

Async Void 이해

Async void는 다음과 같은 경우 미해결 작업 수를 증가시킵니다. 호출되고 완료되면 감소합니다. 이는 ASP.Net이 완료를 추적하므로 실제로 "실행 후 잊어버리는" 동작이 발생하지 않음을 의미합니다.

비동기 작업이 작동하는 이유는 무엇입니까?

언제 Task를 반환하더라도 미해결 작업 수가 증가하지 않습니다. 대신 프레임워크는 반환된 작업이 완료될 때까지 비동기적으로 대기하는 것을 처리합니다. 이 접근 방식은 위에서 언급한 예외가 발생할 가능성을 제거합니다.

public class HomeController : AsyncController
{
    // Will work fine (no exception)
    public async Task<ActionResult> ThisPageWillLoad()
    {
        // Fire and forget task
        this.FireAndForgetTask();

        return await Task.FromResult(this.View("Index"));
    }

    private async Task FireAndForgetTask()
    {
        var task = Task.Delay(TimeSpan.FromSeconds(3));
        await task;
    }

    // Will result in an exception due to async void
    public async Task<ActionResult> ThisPageWillNotLoad()
    {
        this.FireAndForgetVoid();

        return await Task.FromResult(this.View("Index"));
    }

    private async void FireAndForgetVoid()
    {
        var task = Task.Delay(TimeSpan.FromSeconds(3));
        await task;
    }
}
로그인 후 복사

역사적 맥락

Microsoft는 우선 순위를 거꾸로 지정했습니다. ASP.Net에 비동기를 도입할 때 호환성 및 "하나의 ASP.NET". 그들은 EAP 구성 요소에 대한 지원을 유지했지만 특정 시나리오에서 부적절한 비동기 무효 사용을 감지하고 예외 처리하기 위해 핵심 ASP.Net 동기화 컨텍스트를 향상했습니다. MVC/WebAPI/SignalR 세계에서 프레임워크는 async Task를 자연스럽게 채택하여 async void의 필요성을 제거했습니다.

결론

최신 ASP.Net 애플리케이션에서는 일반적으로 async void를 피하고 대신 Task를 반환하는 것이 좋습니다. 이 접근 방식을 사용하면 미해결 작업을 적절하게 추적하고 앞서 언급한 예외가 발생할 가능성을 제거할 수 있습니다.

위 내용은 ASP.NET에서 뛰어난 작업을 처리할 때 Async Void 및 Async 작업 메서드는 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿