33

비동기 함수를 만들고 싶습니다.async이렇게 :

public async static void something(){
}

반환 유형이 다음과 같은지 확인할 수 있습니다.void. 이 함수는 차단없이 비동기 적으로 호출되기를 원합니다. 반환은voidso noawait필요합니다.

하지만 Visual Studio 2012에서는 이것을 컴파일 할 수 없습니다.await?

함수를 만드는 샘플을 조언 해 주시겠습니까async사용하지 않고await.


1 답변


30

어쩌면 당신이 오해 한 것 같아요.async않습니다. 경고는 정확히 맞습니다 : 당신이 당신의 방법을 표시한다면async하지만 사용하지 마라.await어디서나, 당신의 방법비동기가되지 않습니다.. 이 함수를 호출하면 메서드 내의 모든 코드가 동 기적으로 실행됩니다.

또한 사용을 피하려고 시도해야합니다.async void메서드를 사용하면 예외 처리가 어렵습니다.


  • async메서드가 호출 될 때 메서드 자체를 비동기로 만들거나 그렇지 않으면 만들지 않습니다.await메소드 내부 어디에서든지? 위의 샘플처럼, 내가 전화하면something(), 그것은 현재 스레드를 차단합니까? - Eric Yin
  • 예, 장기 실행 코드가 내부에있는 경우something()(그리고 아무도await), 스레드를 차단합니다. 경고가 귀하에게 말하고자하는 바입니다. - svick
  • async당신의 방법을 마 법적으로 차단하지 못하게하는 것이 아닙니다. 다른 스레드에서 일부 코드를 실행하려면 다음을 사용하십시오.Task.Run(). - svick
  • 오, 알았어, 나는 콘서트를 오해한다. 비동기식 메서드가 비동기식 호출을 사용하려고하는 것은 자체가 비동기 적이라는 뜻이 아니다. - Eric Yin
  • @ 패트릭 그럼 당신은 사용할 수 있습니다.Task.Run()다른 스레드에서 실행합니다. - svick

연결된 질문


관련된 질문

최근 질문