작업이 비동기 또는 비동기 대기없이 동기입니까?

스티브

만약 내가 task하지 않고 async await, 내 의지 task비동기 또는 동기 고려? 에서 마이크로 소프트의 문서 , 그것은라고 The tasks run asynchronously and may complete in any order.하지만, 하나 개의 유래 포스트 , 그것은 말한다Wait will synchronously block until the task completes. So the current thread is literally blocked waiting for the task to complete.

피터 두니 호

작업이 비동기 또는 비동기 대기없이 동기입니까?

그것은 전적으로Task 그 자체 달려 있으며 사용 여부와 관련await없습니다.

를 사용 Task.Run()하여 새 작업을 만들면 작업자를 스레드 풀에 대기시키고 비동기 적으로 실행 됩니다. 그러나 메서드 Task에서 객체를 가져올 수도 있습니다.이 Task.FromResult()메서드는 완료된 작업을 동 기적으로 반환 합니다 .

이 두 극단 사이에는 async때로는 동기식으로 완료되고 때로는 완료되지 않는 메서드 (예 : 파일 또는 네트워크에서 데이터 읽기, 때로는 데이터가 이미 버퍼링되어 사용 가능하고 다른 경우에는 나중에까지 사용할 수없는 경우) 와 같은 것들이 있습니다.

스택 오버플로는 당신이 언급 게시 작업의 비동기 자연과 아무 상관이없는,하지만 당신은 방법에 따라 오히려 무슨 일 대기 완료 될 때까지 작업. 물론 동기식으로 완료된 작업 개체는 개체에 대한 참조가있을 때 이미 완료되었으므로 이러한 개체에 대해 "대기"하면 실제로 아무것도 차단하지 않습니다. 따라서 흥미로운 경우는 아직 완료되지 않은 작업 객체입니다. 즉, 비동기 적으로 완료 될 것입니다.

이 경우 Wait()메서드는 현재 스레드를 차단합니다. 이는 의도적으로 설계된 것이며 명확하게 문서화되어 있습니다. 이것은 거의 당신이 원하는 것이 아닙니다. 그러나를 사용하더라도 Wait()작업 자체는 여전히 비동기 적이라는 점에 유의하는 것이 중요합니다 . 현재 스레드를 차단했을 수 있지만 작업이 나타내는 모든 것을 포함하여 프로세스에서 여전히 다른 일이 발생합니다. 이러한 일은 현재 스레드에서 비동기 적으로 발생합니다.

현재 스레드가 아무 작업도하지 않도록 선택했다는 사실은 시작한 작업의 본질적으로 비동기 특성을 변경하지 않습니다.

보다 일반적으로 await작업이 완료되면 현재 동기화 컨텍스트에서 나중에 현재 메서드가 다시 실행되도록 요청을 효과적으로 등록하는 데 사용 합니다. 상기 await문, 현재의 방법은 다른 일을 계속 할 수 있도록 호출자에게 스레드 등을 얻을 것입니다. 이 경우 작업은 Wait()스레드를 사용 하고 차단 한 것처럼 여전히 비동기 적으로 완료 되지만 현재 스레드는 다른 작업을 수행 할 기회도 갖게됩니다.

두 경우 모두 작업 자체는 여전히 비동기 적입니다. 당신이 그것을 기다린 방식은 그것에 아무런 영향을 미치지 않습니다.

IMHO, 작업이 비동기인지 여부에 대해 걱정하는 것은 의미가 없습니다. 코드는 상관없이 동일하게 작동해야합니다. 대신 작업을 미래의 어느 시점에 결과를 제공하겠다는 "약속"으로 간주하십시오. 실제로 "약속"과 "미래"라는 단어는 다른 프로그래밍 환경에서 "작업"대신 동일한 것을 나타내는 데 자주 사용됩니다. 때로는 그 약속이 즉시 성취되고 때로는 시간이 걸리지 만 어떤 일이 발생하는지는 실제로 중요하지 않습니다. 중요한 것은 약속 자체가 아니라 약속이 언제 어떻게 유지 될 것인지가 아닙니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

비동기 작업 또는 스레드

분류에서Dev

비동기로 동기화하는 비동기 작업에 이상한 동작이 있습니다.

분류에서Dev

서비스 중지가 동기 또는 비동기입니까?

분류에서Dev

비동기 작업을 동기화하는 방법은 무엇입니까?

분류에서Dev

이것을 비동기로 만드는 방법은 무엇입니까? (비동기, 대기-C #, MVC)

분류에서Dev

.hide ( "slow")는 동기 또는 비동기 메서드입니까?

분류에서Dev

대기 / 비동기 이상한 동작

분류에서Dev

Task.WhenAll ()이 작동하지 않는 C # 비동기 작업

분류에서Dev

Task.WhenAll ()이 작동하지 않는 C # 비동기 작업

분류에서Dev

비동기 대기 작업이 실행되는 동안 Flutter에 위젯 표시

분류에서Dev

리디렉션 된 stdout에 대한 비동기 쓰기는 동기 또는 비동기입니까?

분류에서Dev

Task <T>없이 작업 반환 값 (비동기 / 대기 패턴)

분류에서Dev

이 readline 비동기 반복기가 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

동기 또는 비동기 데이터 바인딩

분류에서Dev

비동기 작업이있는 WCF 웹 서비스

분류에서Dev

비동기 WCF 서비스 작업을 구현하는 이유

분류에서Dev

비동기 대기는 정말 많이 기다립니다

분류에서Dev

비동기 대기는 정말 많이 기다립니다

분류에서Dev

비동기 또는 동기 모델이 발생하기를 기다리고 있습니까?

분류에서Dev

.json ()이 비동기 인 이유는 무엇입니까?

분류에서Dev

'생성'이 비동기식 인 이유는 무엇입니까?

분류에서Dev

await는 nodejs에서 비동기 함수없이 어떻게 작동합니까?

분류에서Dev

kafkatemplate 비동기 응답을 위해 작성된 최대 비동기 스레드 수는 얼마입니까?

분류에서Dev

ProgressDialog가있는 비동기 작업

분류에서Dev

대기하지 않고 비동기 작업의 결과를 기다리는 방법은 무엇입니까?

분류에서Dev

SignInAsync가 비동기 인 이유는 무엇입니까?

분류에서Dev

이 메서드는 비동기식입니까?

분류에서Dev

Python 비동기 : 다른 작업을 수행하는 동안 stdin 입력 대기

분류에서Dev

Python 비동기 : 다른 작업을 수행하는 동안 stdin 입력 대기

Related 관련 기사

  1. 1

    비동기 작업 또는 스레드

  2. 2

    비동기로 동기화하는 비동기 작업에 이상한 동작이 있습니다.

  3. 3

    서비스 중지가 동기 또는 비동기입니까?

  4. 4

    비동기 작업을 동기화하는 방법은 무엇입니까?

  5. 5

    이것을 비동기로 만드는 방법은 무엇입니까? (비동기, 대기-C #, MVC)

  6. 6

    .hide ( "slow")는 동기 또는 비동기 메서드입니까?

  7. 7

    대기 / 비동기 이상한 동작

  8. 8

    Task.WhenAll ()이 작동하지 않는 C # 비동기 작업

  9. 9

    Task.WhenAll ()이 작동하지 않는 C # 비동기 작업

  10. 10

    비동기 대기 작업이 실행되는 동안 Flutter에 위젯 표시

  11. 11

    리디렉션 된 stdout에 대한 비동기 쓰기는 동기 또는 비동기입니까?

  12. 12

    Task <T>없이 작업 반환 값 (비동기 / 대기 패턴)

  13. 13

    이 readline 비동기 반복기가 제대로 작동하지 않는 이유는 무엇입니까?

  14. 14

    동기 또는 비동기 데이터 바인딩

  15. 15

    비동기 작업이있는 WCF 웹 서비스

  16. 16

    비동기 WCF 서비스 작업을 구현하는 이유

  17. 17

    비동기 대기는 정말 많이 기다립니다

  18. 18

    비동기 대기는 정말 많이 기다립니다

  19. 19

    비동기 또는 동기 모델이 발생하기를 기다리고 있습니까?

  20. 20

    .json ()이 비동기 인 이유는 무엇입니까?

  21. 21

    '생성'이 비동기식 인 이유는 무엇입니까?

  22. 22

    await는 nodejs에서 비동기 함수없이 어떻게 작동합니까?

  23. 23

    kafkatemplate 비동기 응답을 위해 작성된 최대 비동기 스레드 수는 얼마입니까?

  24. 24

    ProgressDialog가있는 비동기 작업

  25. 25

    대기하지 않고 비동기 작업의 결과를 기다리는 방법은 무엇입니까?

  26. 26

    SignInAsync가 비동기 인 이유는 무엇입니까?

  27. 27

    이 메서드는 비동기식입니까?

  28. 28

    Python 비동기 : 다른 작업을 수행하는 동안 stdin 입력 대기

  29. 29

    Python 비동기 : 다른 작업을 수행하는 동안 stdin 입력 대기

뜨겁다태그

보관