该接受的答案质疑"为什么这个Parallel.ForEach代码冻结程序吗?" 建议在WPF应用程序中用ConcurrentBag替换List使用.
我想了解是否可以在这种情况下使用BlockingCollection?
最近几天我一直在阅读有关 async/await 的内容。昨天我在第 9 频道上发现了这个视频,让我对某些事情感到惊奇。请考虑下面的幻灯片。

除了 Lucian Wischik 解决的问题之外,我还想知道变量赋值。假设我们更改了async voidinto async Task,并await在SendData调用之前添加。这使我们能够获取流,分配变量m_GetResponse,等待两秒钟并打印它。但是变量会发生什么?它可以由与读取不同的线程写入。我们是否需要某种内存屏障,使变量变得易失,或者其他什么?当我们打印它时它仍然为空吗?
在代码的并行部分中,我将每个线程的结果保存到ConcurrentBag中。但是,完成此操作后,我需要遍历每个结果并通过我的评估算法运行它们。普通的foreach实际上会遍历所有成员,还是我需要特殊的代码?我还考虑过使用队列之类的东西来代替行李,但我不知道哪种方法最好。在并行代码的末尾,袋子通常只包含20个左右的项目。
即,实际上将为ConcurrentBag的所有成员访问并运行foreach吗?
ConcurrentBag futures = new ConcurrentBag();
foreach(move in futures)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)