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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-04 01:43:41843검색

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으로 문의하세요.