【发布时间】:2016-07-22 08:05:22
【问题描述】:
我有一堆从 Dispatcher 调用的异步方法。这些方法不会在后台执行任何工作,它们只是等待一些 I/O 操作,或者等待网络服务器的响应。
async Task FetchAsync()
{
// Prepare request in UI thread
var response = await new WebClient().DownloadDataTaskAsync();
// Process response in UI thread
}
现在,我想执行负载测试,方法是并行调用多个 FetchAsync(),并以某种最大并行度进行。
我的第一次尝试是使用Paralell.Foreach(),但 id 不适用于 async/await。
var option = new ParallelOptions {MaxDegreeOfParallelism = 10};
Parallel.ForEach(UnitsOfWork, uow => uow.FetchAsync().Wait());
我一直在研究响应式扩展,但我仍然无法利用 Dispatcher 和 async/await。
我的目标是不为每个FetchAsync() 创建单独的线程。你能给我一些提示吗?
【问题讨论】:
-
不要将
Parallel.ForEach与async/awaitstackoverflow.com/a/11565317/585968 混为一谈,正如您所发现的那样 -
如果没有单独的线程,您将无法并行运行。看看concurrency vs parallelism what is the difference
-
@AntP:您已删除我的 EDIT,因为“无需使用 asnwers 编辑问题”,但在我的编辑中对答案进行了重要修改。请回滚!
-
@Liero 如果它的不同足以成为一个单独的答案,它应该作为一个单独的答案发布(而不是在问题内)。不过,据我所知,这是一个非常狭窄的变化,仅适用于这个特定示例,对于未来的读者来说不会是一个重要的区别。
标签: c# multithreading parallel-processing async-await dispatcher