【发布时间】:2012-11-15 23:07:43
【问题描述】:
我对通过 Post() 或 SendAsync() 发送项目的区别感到困惑。我的理解是,在所有情况下,一旦项目到达数据块的输入缓冲区,控制就会返回到调用上下文,对吗?那我为什么需要 SendAsync 呢?如果我的假设不正确,那么我想知道,相反,如果使用数据块的整个想法是建立一个并发和异步环境,为什么有人会使用 Post()。
我当然理解 Post() 返回一个 bool 而 SendAsync 返回一个可等待的 bool 任务的技术差异。但这有什么影响?什么时候会延迟返回布尔值(我的理解是确认该项目是否已放入数据块的队列中)?我了解 async/await 并发框架的一般概念,但在这里它没有多大意义,因为除了 bool 之外,对传入项目所做的任何事情的结果都不会返回给调用者,而是放在一个“out-queue”并转发到链接的数据块或丢弃。
在发送项目时,这两种方法之间有什么性能差异吗?
【问题讨论】:
-
来自this blog 的相关引用:1) 动作块的客户端可以提供队列大小(在构造函数中)。 2) 当队列已满时,Post 方法返回 false,SendAsync 方法“阻塞”,直到队列获得空闲位置。
标签: c# concurrency task-parallel-library message-passing tpl-dataflow