"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 비동기/대기하는 사용 : 작업 또는 무효?

비동기/대기하는 사용 : 작업 또는 무효?

2025-04-15에 게시되었습니다
검색:590

Async/Await: Should I Return a Task or Void?

Async/Await 메소드의 반환 값 : 작업 또는 무효?

비동기 프로그래밍에서 async 메소드의 반환 값이 task void 가 큰 영향을 미칩니다. 이 기사는 각 옵션이 적용되는 시나리오를 살펴 봅니다.

return task

일반적으로

async 메소드는 task 를 반환해야합니다. 이를 통해 코드 가 호출되고 필요한 경우 진행 상황을 추적 할 수 있습니다. 이 규칙의 주요 예외는 이벤트를 처리 할 때와 같은 void 반환 유형이 명시 적으로 필요할 때입니다.

return void

void return type의 메소드를 사용하여 "최상위 비동기 조작"으로 태그. 이러한 작업은 예외가 발생할 때 다르게 행동합니다. 반환 값의 작업 와 달리 void 비동기 메소드의 예외는 기본적으로 관찰되지 않습니다. 그것들은 처리되지 않은 예외가되어 taskscheduler.unobservedtaskexception 핸들러를 트리거 할 수 있습니다. 다음 예를 고려하십시오 :

public static async void AsyncMethod2 (int num) { await task.factory.startnew (() => thread.sleep (num)); }
public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}
async

는 예외를 명시 적으로 처리 할 필요가 없기 때문에 키워드가 불필요합니다. 그러나 예외가 발생하면 관찰되지 않으며 올바르게 처리되지 않을 수 있습니다.

예외 처리 예

]

task

void 비동기 메소드 간의 예외 처리 차이를 보여주기 위해 다음 코드를 고려하십시오. 정적 Async void f () { h ()를 기다립니다. } 정적 비동기 작업 g () { h ()를 기다립니다. } 정적 비동기 작업 h () { 새로운 NotimplementedException ()을 던지십시오. }

static async void f()
{
    await h();
}

static async Task g()
{
    await h();
}

static async Task h()
{
    throw new NotImplementedException();
}
]가 호출되면 예외가 관찰되고 다른 처리되지 않은 예외로 처리됩니다. 그러나

g ]가 호출되면 예외는 결코 관찰되지 않으며 taskscheduler.unobservedTaskexception 핸들러에 의해 처리됩니다. 모범 사례

일반적인 모범 사례로서 async

메소드에서 항상

async 메소드에서 항상 task 를 반환합니다 void return type. 이를 통해 예외가 올바르게 처리되고 발신자가 대기하는 작업을 선택하고 진행 상황을 추적 할 수 있습니다.

자세한 내용은

async /에 대한 Microsoft의 문서를 참조하십시오 모범 사례 : [&&)

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3