我有多个REST API调用,我想以并行方式进行.例如
我有一个REST API调用CreateData().我想在服务器中创建1000个数据,适用于4-5个并行线程中的多线程操作.
我是C++开发人员,知道多线程如何在C++中工作.我在C#编码方面很天真.我知道异步任务,但不知道如何实现上述任务.
var response = await Task.Run(()=>CreateData());
Run Code Online (Sandbox Code Playgroud)
现在我依次按顺序进行,一旦我收到了之前CreateData()的响应,我就会在一个线程中创建数据.它正在严重影响性能并花费大量时间.
我想创建5个线程,它们将以并行方式为所有1000个用户执行REST API调用.
现在你分配response
的结果Task.Run
也需要Task
在某些方面完成.编译时会自动发生这种情况,因为您使用的是关键字await
.
如果您愿意,您可以分配response
给Task
自己运行并继续前进.当然我不会再打电话response
了.让我们说你这样做并task1
改为称呼它.
var task1 = Task.Run(()=>CreateData());
Run Code Online (Sandbox Code Playgroud)
现在你的代码将继续运行,并且task1
只代表运行Task
.
如果你有5个你可以完全按照你想要的那样做.
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());
Run Code Online (Sandbox Code Playgroud)
现在,您还可以使用Task.WhenAll
方法同时完成所有这些任务.
await Task.WhenAll(task1, task2, task3, task4, task5);
Run Code Online (Sandbox Code Playgroud)
总结一下.
该await
关键字做一些编译器魔法,基本上把一个回调在那个地方的方法(分配方法的其余部分是一个延续的时候Task
完成),并分配Result
的是Task
给变量(如果Task
有一个结果).这里要解开很多东西; 我不相信简短的回答确实证明了正在发生的事情.
如果不使用await
关键字,则只需将Task
自身分配给变量即可.
归档时间: |
|
查看次数: |
54 次 |
最近记录: |