- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为在测试方法中,“results”集合变量的类型必须是 BlockingCollection<int>
而不是 List<int>
.如果我错了,请证明给我看。我从 https://blog.stephencleary.com/2012/11/async-producerconsumer-queue-using.html 中获取了这个示例
private static async Task Produce(BufferBlock<int> queue, IEnumerable<int> values)
{
foreach (var value in values)
{
await queue.SendAsync(value);
}
}
public async Task ProduceAll(BufferBlock<int> queue)
{
var producer1 = Produce(queue, Enumerable.Range(0, 10));
var producer2 = Produce(queue, Enumerable.Range(10, 10));
var producer3 = Produce(queue, Enumerable.Range(20, 10));
await Task.WhenAll(producer1, producer2, producer3);
queue.Complete();
}
[TestMethod]
public async Task ConsumerReceivesCorrectValues()
{
var results = new List<int>();
// Define the mesh.
var queue = new BufferBlock<int>(new DataflowBlockOptions { BoundedCapacity = 5, });
//var consumerOptions = new ExecutionDataflowBlockOptions { BoundedCapacity = 1, };
var consumer = new ActionBlock<int>(x => results.Add(x), consumerOptions);
queue.LinkTo(consumer, new DataflowLinkOptions { PropagateCompletion = true, });
// Start the producers.
var producers = ProduceAll(queue);
// Wait for everything to complete.
await Task.WhenAll(producers, consumer.Completion);
// Ensure the consumer got what the producer sent.
Assert.IsTrue(results.OrderBy(x => x).SequenceEqual(Enumerable.Range(0, 30)));
}
最佳答案
自 ActionBlock<T>
默认情况下将其委托(delegate)限制为一次执行一次( MaxDegreeOfParallelism
的 1
),没有必要使用 BlockingCollection<T>
而不是 List<T>
.
正如预期的那样,您代码中的测试对我来说顺利通过。
如果ActionBlock<T>
通过了一个更高的选项 MaxDegreeOfParallelism
, 那么你需要保护 List<T>
或者用 BlockingCollection<T>
替换它.
关于c# - 在 ActionBlock 中收集结果时阻止收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337739/
我目前正在使用 ActionBlock 来处理串行启动的异步作业。它可以很好地处理每个发布到它的项目,但无法从每个作业中收集结果列表。 我可以使用什么以线程安全的方式收集我的作业结果? 我的代码目前是
我目前正在使用 ActionBlock 来处理串行启动的异步作业。它可以很好地处理每个发布到它的项目,但无法从每个作业中收集结果列表。 我可以使用什么以线程安全的方式收集我的作业结果? 我的代码目前是
我有一个 ActionBlock,它只处理来自无限循环的连续不断的消息。在 ActionBlock 中,我发布了一个 http 帖子。当出现任何与网络相关的错误时,该方法会抛出异常并且该 block
我认为在测试方法中,“results”集合变量的类型必须是 BlockingCollection而不是 List .如果我错了,请证明给我看。我从 https://blog.stephencleary
我们在发送到 ActionBlock 时看到了意外行为,其中似乎正在发生并行处理,即使 MaxDegreeOfParallelism 为 1。情况如下。 发布到 ActionBlock 的类如下所示:
我需要并行处理某些项目,所以我使用 TPL Dataflow。 .要注意的是,共享相同键(类似于字典)的项目应按 FIFO 顺序处理,而不是彼此平行(它们可以与具有不同值的其他项目平行)。 正在完成的
我想实现优先级 ActionBlock .这样我就可以有条件地优先考虑一些TInput使用 Predicate 的项目. 我读了 Parallel Extensions Extras Samples和
我不确定这是否可行,但如果可行,我可能做得不对。假设我有一个链接到许多消费者(ActionBlocks)的共享缓冲区。每个消费者都应该消费满足用于将其链接到缓冲区的谓词的数据。例如,ActionBlo
我有一个带有 ActionBlock 的 Receiver 类: public class Receiver : IReceiver { private ActionBlock _receiver
我一直在尝试通过创建示例应用程序来理解 TPL 数据流。我一直在尝试做的一件事是从 ActionBlock 更新 TextBox 控件。使用 TPL Dataflow 的原因是在保持顺序的同时执行并行
我正在 .Net TPL 中构建一个管道,该管道经过一系列数据转换步骤,最终需要将输出写入文件。我正在考虑使用 ActionBlock 写入文件。但是,我不确定这是否会遇到任何问题......例如多个
我对 Framework 4.0 的 ActionBlock 实现很感兴趣,因为 Framework 4.0 似乎不支持 TPL.Dataflow。更具体地说,我对接收 Func 委托(delegat
我想知道并行执行多个异步方法的推荐方法是什么? 在 System.Threading.Tasks.Dataflow 中,我们可以指定最大并行度,但无界可能也是 Task.WhenAll 的默认设置?
我正在使用 TPL DataFlow 和 ActionBlock 来创建并行性。使用 TPL DataFlow 的原因是因为它支持异步性,除了我无法让它工作。 var ab = new ActionB
刚从 System.Threading.Tasks.Dataflow 开始,不确定我是否理解 ActionBlock 中未处理异常的正确错误处理技术。 我现在所拥有的导致挂起:- ActionBloc
我有这个代码: var data = new BufferBlock(new DataflowBlockOptions { BoundedCapacity = 1 }); var action = n
我是一名优秀的程序员,十分优秀!