C # Rx Subscribe () 함수가 "async"키워드와 함께 작동하지 않는 이유는 무엇입니까?

Troskyvs

이 코드 스 니펫이 있습니다.

static void Main(string[] args)
{
    Observable.Range(1, 5).Subscribe(async x => await DoTheThing(x));
    Console.WriteLine("done");
}

static async Task DoTheThing(int x)
{
    await Task.Delay(TimeSpan.FromSeconds(x));
    Console.WriteLine(x);
}

나는 그것이 5 번 반복되고 각 루프 후에 다음과 같이 인쇄되는 줄이 있기를 바랍니다.

1
2
3
4
5

그러나 놀랍게도 "done"이 인쇄되고 즉시 종료됩니다. async + await가 Task.Delay를 기다리지 않고 종료 한 것 같습니다.

의미론에 문제가없는 것 같습니다. 그래서 Subscribe 또는 async에 대해 어디에서 잘못되었는지, Rx에서 비동기 작업을 호출하라는 요청을 이행하기 위해 어떻게 수정해야합니까?

감사.

까지

그것은 차단되지 않습니다. 왜냐하면 그것은 비동기 적이기 때문입니다. 코드는 모두 병렬로 실행되는 5 개의 작업을 생성하며 모두 다양한 시간에 완료됩니다.

그러나 그들은 Main기능을 차단하지 않습니다 . Console.ReadKey()마지막 줄로를 추가하면 코드가 백그라운드에서 실행되는 것을 볼 수 있습니다. 인쇄됩니다.

static void Main(string[] args)
{
    Observable.Range(1, 5).Subscribe(async x => await DoTheThing(x));
    Console.WriteLine("done");
    Console.ReadKey();
}

그러나 모든 작업이 완료 될 때까지 기다리고 싶다고 가정 해보십시오. 그럼 뭐야?

물론는 .Wait()있지만 차단입니다. 우리의 모든 작업을 관찰 가능한 것으로 관찰합시다.

우리는 C # 7을 사용할 async Main것입니다.

static async Task Main(string[] args)
{
    await Observable.Range(1, 5)
        .Select(x => DoTheThing(x).ToObservable())
        .Merge();                

    Console.WriteLine("done");
}

이것은 당신이 예상했던 것과 똑같이 작동합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

await 키워드가있는 함수에 async 키워드를 넣어야하는 이유는 무엇입니까?

분류에서Dev

$ cookies와 $ localStorage가 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

appendChild가 createDocumentFragment와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

GNU 병렬이 "bash -c"와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

grep이 iostat와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

루프가 작동하지 않는 이유는 무엇입니까? if & C 함수

분류에서Dev

hg gexport가 --cwd 매개 변수와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

onmouseover () 함수가 onmouseover = "javascript code"속성과 함께 작동하지만 addEventListener () 함수와 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 프로그램이 부동 변수와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

mkdir이 와일드 카드와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

nnoremap이 CtrlP와 함께 작동하지 않고 nmap이 작동하는 이유는 무엇입니까? -VIM

분류에서Dev

인증서와 키는 openssl과 함께 작동합니다. jks 키 저장소에서 JSSE와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

파이프가 고양이와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

if, elif 또는 else가 Python에서 .lower ()와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

함수 환경에서``평균 ''함수가``group_by %> % summarise``와 함께 제대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

resty.redis가 ngx.timer와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

xargs가 tail -f와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

struct 키워드가 변수 선언과 함께 함수에서 재사용 될 때 컴파일러가 불평하지 않는 이유는 무엇입니까?

분류에서Dev

urxvtc가 "-c"인수와 함께 호출 될 때 zsh 함수를 accetp하지 않는 이유는 무엇입니까?

분류에서Dev

자동 초점이 antd와 함께 ReactJS에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

getDeclaredMethod가 특정 메서드와 instanceof 관계에있는 인수와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

toUpperCaseFunction이 await 키워드와 함께 작동하지 않습니다.

분류에서Dev

C ++ find 함수와 함께 사용할 때 반복기가 다르게 작동하는 이유는 무엇입니까?

분류에서Dev

사전 요소가 파이썬에서 max 함수와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Dart에서 await 키워드없이 async 키워드가 작동하는 이유는 무엇입니까?

분류에서Dev

두 jquery 함수가 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

bash의 줄 주석 트릭이 느낌표 "!"와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

ownKeys 프록시 트랩이 Object.keys ()와 함께 작동하지 않는 이유는 무엇입니까?

분류에서Dev

함수로 이동할 때 Java 코드가 작동하지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    await 키워드가있는 함수에 async 키워드를 넣어야하는 이유는 무엇입니까?

  2. 2

    $ cookies와 $ localStorage가 함께 작동하지 않는 이유는 무엇입니까?

  3. 3

    appendChild가 createDocumentFragment와 함께 작동하지 않는 이유는 무엇입니까?

  4. 4

    GNU 병렬이 "bash -c"와 함께 작동하지 않는 이유는 무엇입니까?

  5. 5

    grep이 iostat와 함께 작동하지 않는 이유는 무엇입니까?

  6. 6

    루프가 작동하지 않는 이유는 무엇입니까? if & C 함수

  7. 7

    hg gexport가 --cwd 매개 변수와 함께 작동하지 않는 이유는 무엇입니까?

  8. 8

    onmouseover () 함수가 onmouseover = "javascript code"속성과 함께 작동하지만 addEventListener () 함수와 작동하지 않는 이유는 무엇입니까?

  9. 9

    내 프로그램이 부동 변수와 함께 작동하지 않는 이유는 무엇입니까?

  10. 10

    mkdir이 와일드 카드와 함께 작동하지 않는 이유는 무엇입니까?

  11. 11

    nnoremap이 CtrlP와 함께 작동하지 않고 nmap이 작동하는 이유는 무엇입니까? -VIM

  12. 12

    인증서와 키는 openssl과 함께 작동합니다. jks 키 저장소에서 JSSE와 함께 작동하지 않는 이유는 무엇입니까?

  13. 13

    파이프가 고양이와 함께 작동하지 않는 이유는 무엇입니까?

  14. 14

    if, elif 또는 else가 Python에서 .lower ()와 함께 작동하지 않는 이유는 무엇입니까?

  15. 15

    함수 환경에서``평균 ''함수가``group_by %> % summarise``와 함께 제대로 작동하지 않는 이유는 무엇입니까?

  16. 16

    resty.redis가 ngx.timer와 함께 작동하지 않는 이유는 무엇입니까?

  17. 17

    xargs가 tail -f와 함께 작동하지 않는 이유는 무엇입니까?

  18. 18

    struct 키워드가 변수 선언과 함께 함수에서 재사용 될 때 컴파일러가 불평하지 않는 이유는 무엇입니까?

  19. 19

    urxvtc가 "-c"인수와 함께 호출 될 때 zsh 함수를 accetp하지 않는 이유는 무엇입니까?

  20. 20

    자동 초점이 antd와 함께 ReactJS에서 작동하지 않는 이유는 무엇입니까?

  21. 21

    getDeclaredMethod가 특정 메서드와 instanceof 관계에있는 인수와 함께 작동하지 않는 이유는 무엇입니까?

  22. 22

    toUpperCaseFunction이 await 키워드와 함께 작동하지 않습니다.

  23. 23

    C ++ find 함수와 함께 사용할 때 반복기가 다르게 작동하는 이유는 무엇입니까?

  24. 24

    사전 요소가 파이썬에서 max 함수와 함께 작동하지 않는 이유는 무엇입니까?

  25. 25

    Dart에서 await 키워드없이 async 키워드가 작동하는 이유는 무엇입니까?

  26. 26

    두 jquery 함수가 함께 작동하지 않는 이유는 무엇입니까?

  27. 27

    bash의 줄 주석 트릭이 느낌표 "!"와 함께 작동하지 않는 이유는 무엇입니까?

  28. 28

    ownKeys 프록시 트랩이 Object.keys ()와 함께 작동하지 않는 이유는 무엇입니까?

  29. 29

    함수로 이동할 때 Java 코드가 작동하지 않는 이유는 무엇입니까?

뜨겁다태그

보관