为什么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

但令人惊讶的是,这将打印“完成”并立即终止。似乎async + await没有等待Task.Delay并退出。

语义似乎没有问题,所以我在哪里遇到关于Subscribe或async的错误,如何解决它以满足我从Rx调用异步任务的要求?

谢谢。

直到

它没有阻塞,因为它很好-异步。您的代码生成五个任务,这些任务并行运行,并在不同的时间完成。

但是它们不会阻止该Main功能。如果仅将aConsole.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

为什么auto关键字不能与函数指针的初始化列表一起使用?

来自分类Dev

为什么“ var”关键字不能与逗号运算符一起使用?

来自分类Dev

为什么我们不能对接口中的方法一起使用默认访问修饰符和抽象关键字?

来自分类Dev

事件处理功能不能与`this`关键字一起使用

来自分类Dev

为什么使用函数声明不能与Web Worker一起使用?

来自分类Dev

为什么AND()条件/函数不能与ArrayFomula一起使用

来自分类Dev

为什么each()函数不能与连接到DOM的输入一起使用?

来自分类Dev

为什么isblank返回的数组不能与Excel中的match函数一起使用?

来自分类Dev

为什么聚合函数不能与以下查询的内联视图一起使用?

来自分类Dev

为什么 ArrayFormula 不能与 LOOKUP 函数一起使用?

来自分类Dev

为什么“均值”函数在函数环境中不能与“ group_by%>%summarise”一起正常使用?

来自分类Dev

LibreOffice为什么不能与HUD一起使用?

来自分类Dev

为什么模拟不能与AsyncTask一起使用?

来自分类Dev

LibreOffice为什么不能与HUD一起使用?

来自分类Dev

为什么childElementCount不能与jQuery一起使用?

来自分类Dev

为什么javascript“ this”不能与“ each”一起使用?

来自分类Dev

setuid为什么不能与mount一起使用?

来自分类Dev

为什么JQuery不能与CryptoJS一起使用?

来自分类Dev

为什么 grep 不能与 iostat 一起使用?

来自分类Dev

为什么 foreach 不能与 String 一起使用?

来自分类Dev

如何强制执行复制省略,为什么它不能与已删除的复制构造函数一起使用?

来自分类Dev

如何强制执行复制省略,为什么它不能与已删除的复制构造函数一起使用?

来自分类Dev

为什么onmouseover()函数可与属性onmouseover =“ javascript代码”一起使用,但不能与addEventListener()函数一起使用?

来自分类Dev

当使用关键字与函数结果一起使用时,将引发System.ObjectDisposedException

来自分类Dev

为什么我的sql与Max函数一起使用时,它不能与Abs函数一起工作?

来自分类Dev

C,rand函数不能与sleep()函数一起正常工作

来自分类Dev

为什么Quickbooks可以与Ubuntu一起使用,而不能与Fedora一起使用?

来自分类Dev

为什么它可以与$ scope一起使用,但不能与`this`一起使用?

来自分类Dev

与功能指针一起使用时,什么自动关键字在后台运行?

Related 相关文章

  1. 1

    为什么auto关键字不能与函数指针的初始化列表一起使用?

  2. 2

    为什么“ var”关键字不能与逗号运算符一起使用?

  3. 3

    为什么我们不能对接口中的方法一起使用默认访问修饰符和抽象关键字?

  4. 4

    事件处理功能不能与`this`关键字一起使用

  5. 5

    为什么使用函数声明不能与Web Worker一起使用?

  6. 6

    为什么AND()条件/函数不能与ArrayFomula一起使用

  7. 7

    为什么each()函数不能与连接到DOM的输入一起使用?

  8. 8

    为什么isblank返回的数组不能与Excel中的match函数一起使用?

  9. 9

    为什么聚合函数不能与以下查询的内联视图一起使用?

  10. 10

    为什么 ArrayFormula 不能与 LOOKUP 函数一起使用?

  11. 11

    为什么“均值”函数在函数环境中不能与“ group_by%>%summarise”一起正常使用?

  12. 12

    LibreOffice为什么不能与HUD一起使用?

  13. 13

    为什么模拟不能与AsyncTask一起使用?

  14. 14

    LibreOffice为什么不能与HUD一起使用?

  15. 15

    为什么childElementCount不能与jQuery一起使用?

  16. 16

    为什么javascript“ this”不能与“ each”一起使用?

  17. 17

    setuid为什么不能与mount一起使用?

  18. 18

    为什么JQuery不能与CryptoJS一起使用?

  19. 19

    为什么 grep 不能与 iostat 一起使用?

  20. 20

    为什么 foreach 不能与 String 一起使用?

  21. 21

    如何强制执行复制省略,为什么它不能与已删除的复制构造函数一起使用?

  22. 22

    如何强制执行复制省略,为什么它不能与已删除的复制构造函数一起使用?

  23. 23

    为什么onmouseover()函数可与属性onmouseover =“ javascript代码”一起使用,但不能与addEventListener()函数一起使用?

  24. 24

    当使用关键字与函数结果一起使用时,将引发System.ObjectDisposedException

  25. 25

    为什么我的sql与Max函数一起使用时,它不能与Abs函数一起工作?

  26. 26

    C,rand函数不能与sleep()函数一起正常工作

  27. 27

    为什么Quickbooks可以与Ubuntu一起使用,而不能与Fedora一起使用?

  28. 28

    为什么它可以与$ scope一起使用,但不能与`this`一起使用?

  29. 29

    与功能指针一起使用时,什么自动关键字在后台运行?

热门标签

归档