异步运行同一方法的多个实例?

h

我的要求很奇怪。

我有SomeMethod()哪个电话GetDataFor()

public void SomeMethod()
{
    for(int i = 0; i<100; i++) {
        var data = GetDataFor(i);
    }
}

public data GetDataFor(int i) {
    //call a remote API
    //to generate data for i
    //store to database
    return data;
}

对于每个i,最终结果将始终是不同的。有没有需要等待GetDataFor(i)调用之前完成GetDataFor(i+1)

换句话说,我需要:

  • 成功调用后立即呼叫GetDataFor()每个对象(并行调用它们看起来是不可能的)i+1 i
  • 等到所有100个实例GetDataFor()完成运行
  • 离开范围 SomeMethod()

遵循YK1的答案,我试图像这样修改它:

public async Task<void> SomeMethod()
{
    for(int i = 0; i < 100; i++) {
        var task = Task.Run(() => GetDataFor(i));
        var data = await task;
    }
}

它没有引发任何错误,但是我需要了解其背后的概念:

  • 如何task区分不同的await求助电话它已被覆盖。
  • 这是公然错误的方法吗?那么,怎么做对呢?
阿图罗·门恰卡(Arturo Menchaca)

您可以使用Parallel.For

public void SomeMethod()
{
    Parallel.For(0, 100, i =>
    {
        var data = GetDataFor(i);
        //Do something
    });
}

public data GetDataFor(int i)
{
    //generate data for i
    return data;
}

编辑:

并行循环的语法forforeach您已经知道and循环非常相似,但是并行循环在具有可用核心的计算机上运行得更快。另一个区别是,与顺序循环不同,它没有为并行循环定义执行顺序。步骤通常是同时并行进行的。有时,与循环是顺序的相比,两个步骤的执行顺序相反。唯一的保证是,所有循环的迭代将在循环结束时运行。

对于并行循环,不需要由代码指定并行度。而是,运行时环境在尽可能多的内核上同时执行循环的步骤。无论有多少个内核可用,循环都能正常工作。如果只有一个内核,那么性能将接近等效的内核(也许在几个百分点之内)。如果有多个核心,性能会提高;在许多情况下,性能与内核数成比例地提高。

您可以在此处查看更详细的说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何异步运行同一类的多个实例?

来自分类Dev

执行同一方法消耗的时间少得多

来自分类Dev

异步和等待-处理对同一方法的多次调用-互相锁定/等待吗?

来自分类Dev

在C#5中多次异步调用同一方法是否安全?

来自分类Dev

在同一方法中使用多个等待的效果?

来自分类Dev

Mockito-分别验证同一方法的多个调用

来自分类Dev

在Spock中模拟对同一方法的多个调用

来自分类Dev

将多个wx.EVT_MENU绑定到同一方法?

来自分类Dev

同一方法中的多个数据库

来自分类Dev

单一方法中的多个等待

来自分类Dev

单一方法中的多个等待

来自分类Dev

多个客户端在同一方法中都需要一些不同的功能

来自分类Dev

在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

来自分类Dev

Pytest:模拟具有相同side_effect的同一方法的多个调用

来自分类Dev

在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

来自分类Dev

使用.NET多线程运行同一应用程序的多个实例

来自分类Dev

可以运行同一可执行文件的多个实例吗?

来自分类Dev

使用.NET多线程运行同一应用程序的多个实例

来自分类Dev

在VS Code中运行同一任务的多个实例

来自分类Dev

如何使用MSM Boost库运行同一子状态机的多个实例

来自分类Dev

ASP.NET MVC 运行同一网页的多个实例

来自分类Dev

运行同一个 springboot 应用程序的多个实例

来自分类Dev

一次调用同一方法多次

来自分类Dev

多次调用同一方法时取消方法调用

来自分类Dev

搜索来自Django模型方法的结果,包括先前对同一方法的调用的结果

来自分类Dev

多次调用同一方法时取消方法调用

来自分类Dev

如何使用SFINAE创建同一方法的2个不同实现

来自分类Dev

是否可以在同一方法中同时使用GET和POST?

来自分类Dev

子对象和父对象被传递到同一方法

Related 相关文章

  1. 1

    如何异步运行同一类的多个实例?

  2. 2

    执行同一方法消耗的时间少得多

  3. 3

    异步和等待-处理对同一方法的多次调用-互相锁定/等待吗?

  4. 4

    在C#5中多次异步调用同一方法是否安全?

  5. 5

    在同一方法中使用多个等待的效果?

  6. 6

    Mockito-分别验证同一方法的多个调用

  7. 7

    在Spock中模拟对同一方法的多个调用

  8. 8

    将多个wx.EVT_MENU绑定到同一方法?

  9. 9

    同一方法中的多个数据库

  10. 10

    单一方法中的多个等待

  11. 11

    单一方法中的多个等待

  12. 12

    多个客户端在同一方法中都需要一些不同的功能

  13. 13

    在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

  14. 14

    Pytest:模拟具有相同side_effect的同一方法的多个调用

  15. 15

    在Quickbook PHP API中,如何使用enqueue()将对同一方法的多个调用排队

  16. 16

    使用.NET多线程运行同一应用程序的多个实例

  17. 17

    可以运行同一可执行文件的多个实例吗?

  18. 18

    使用.NET多线程运行同一应用程序的多个实例

  19. 19

    在VS Code中运行同一任务的多个实例

  20. 20

    如何使用MSM Boost库运行同一子状态机的多个实例

  21. 21

    ASP.NET MVC 运行同一网页的多个实例

  22. 22

    运行同一个 springboot 应用程序的多个实例

  23. 23

    一次调用同一方法多次

  24. 24

    多次调用同一方法时取消方法调用

  25. 25

    搜索来自Django模型方法的结果,包括先前对同一方法的调用的结果

  26. 26

    多次调用同一方法时取消方法调用

  27. 27

    如何使用SFINAE创建同一方法的2个不同实现

  28. 28

    是否可以在同一方法中同时使用GET和POST?

  29. 29

    子对象和父对象被传递到同一方法

热门标签

归档