我有一个 C# 控制台应用程序,每 1 分钟处理来自 RabbitMQ 的大约 100,000 条 JSON 消息
从 RabbitMQ 获取每条/一堆消息后,我然后调用
await Task.Run(async () =>
{
//do lots of CPU stuff here, including 2 external API calls using await async call
}
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都说使用awaitTask.Run进行CPU 密集型操作。并用于await asyncHTTP外部调用。
如果我把它改成:
await Task.Run(() =>
Run Code Online (Sandbox Code Playgroud)
然后它会抱怨,因为我async在下面的行中有一个 API 调用,所以它需要语句async中的关键字Task.Run。
本节大约有 2000 多行代码(复杂的 if then 业务规则),有时不需要 API 调用。
因此,我面临着要么对应用程序进行大规模重组,需要进行大量测试,要么如果可以在 CPU 绑定操作的同时进行 API 调用,那么我将保持原样。
总而言之,这是不好的做法,还是可以在同一任务中进行 CPU 密集型工作和 API 调用?该任务正在处理一条 JSON 消息。