一、异步类型的选择。
编写代码前应考虑的两个问题:
-
你的代码是否会“等待”某些内容,例如数据库中的数据?
如果答案为“是”,则你的工作是 I/O 绑定。请使用
async
和await
(而不使用Task.Run
)。 不应使用任务并行库。 相关原因在深入了解异步的文章中说明。 -
你的代码是否要执行开销巨大的计算?
如果答案为“是”,则你的工作是 CPU 绑定,并且你重视响应能力,请使用
async
和await
,并在另一个线程上使用Task.Run
生成工作。 如果该工作同时适用于并发和并行,则应考虑使用任务并行库。
此外,应始终对代码的执行进行测量。 例如,你可能会遇到这样的情况:多线程处理时,上下文切换的开销高于 CPU 绑定工作的开销。 每种选择都有折衷,应根据自身情况选择正确的折衷方案。