【发布时间】:2020-02-07 21:13:15
【问题描述】:
我有这样的功能:
static void AddResultsToDb(IEnumerable<int> numbers)
{
foreach (int number in numbers)
{
int result = ComputeResult(number); // This takes a long time, but is thread safe.
AddResultToDb(number, result); // This is quick but not thread safe.
}
}
我可以解决这个问题,例如,使用Parallel.ForEach 计算结果,然后使用常规foreach 将结果添加到数据库中。
但是,出于教育目的,我想要一个围绕等待/异步的解决方案。但是,无论我读了多少关于它的内容,我都无法将其全神贯注。如果 await/async 在这种情况下不适用,我想了解原因。
【问题讨论】:
-
既然目的是教育性的,我们是否可以假设调用的两个方法是异步的(
ComputeResultAsync、AddResultToDbAsync)?因为如果它们不是异步的,那么这个练习的教育价值将非常小,如果不是负面的话。 async/await 是一种旨在解决异步问题而不是并发问题的技术。
标签: c# concurrency async-await