首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个任务分配给多个线程

将多个任务分配给多个线程
EN

Stack Overflow用户
提问于 2019-01-28 05:16:29
回答 2查看 449关注 0票数 2

我有多个REST 调用,我想以并行方式进行。例如。

我有一个REST调用CreateData()。我想要在服务器上创建1000个数据,它适用于4-5并行线程中的多线程操作。

我是C++开发人员,知道C++中多线程是如何工作的。我在C#编码方面很幼稚。我知道异步任务,但不知道如何完成上述任务。

代码语言:javascript
复制
var response = await Task.Run(()=>CreateData());

现在,我正在按顺序执行该操作,一旦收到以前的CreateData()的响应,就会一个一个地在一个线程中创建数据。它严重影响了业绩,花了很多时间。

我想要创建5个线程,它将以并行方式对所有1000个用户执行REST调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-28 05:33:17

现在,您将response分配给Task.Run的结果,这也要求Task在某些方面完成。这在编译时会自动发生,因为您使用的是关键字await

如果您愿意,只需将response分配给正在运行的Task本身,然后继续运行。我当然不会再叫它response了。假设您这样做,并将其命名为task1

代码语言:javascript
复制
var task1 = Task.Run(()=>CreateData());

现在,您的代码将继续运行,task1只表示正在运行的Task

如果你有5个孩子,你可以像你想要的那样做。

代码语言:javascript
复制
var task1 = Task.Run(()=>CreateData());
var task2 = Task.Run(()=>CreateData());
var task3 = Task.Run(()=>CreateData());
var task4 = Task.Run(()=>CreateData());
var task5 = Task.Run(()=>CreateData());

现在,您还可以使用Task.WhenAll方法等待所有这些任务同时完成。

代码语言:javascript
复制
await Task.WhenAll(task1, task2, task3, task4, task5);

所以总结一下。

await关键字具有一定的编译器魔力,基本上将回调放在方法的那个位置(在Task完成时将方法的其余部分指定为延续),并将该TaskResult分配给变量(如果Task有结果的话)。这里有很多东西要打开,我不相信一个简短的答案真的能证明所发生的一切是正确的。

不使用await关键字,那么只需将Task本身分配给变量。

票数 5
EN

Stack Overflow用户

发布于 2019-01-28 05:32:00

您可以参考这个https://stackoverflow.com/a/25010220/4209924

你可以做这样的事。

代码语言:javascript
复制
    public async Task CreateData()
    {
        // your logic here with await
    }

    public async Task GetData()
    {
        var data1 = CreateData();
        var data2 = CreateData();
        var data3 = CreateData();
        var data4 = CreateData();
        await Task.WhenAll(new Task[] { data1, data2, data3, data4 });
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54395904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档