我正在 Asp Net Core 应用程序中实现简单的后台作业队列。我创建了它在幕后BackgroundJobQueue使用来排队将通过 处理的项目。阅读文档我偶然发现了通道的ChannelOptions.AllowSynchronousContinuations设置。BoundedChannel<T>HostedService
根据msdn的描述说:
将此选项设置为 true 可以通过避免安排额外的工作项目来提供可测量的吞吐量改进。然而,这可能会以减少并行性为代价,例如生产者可能是执行与消费者相关的工作的人,如果不深思熟虑,这可能会导致意外的交互。默认为 false。
我不太明白true在我的情况下设置此选项是否是一个好的选择。有人可以解释+提供这个选项何时有用/无用/有害的例子吗?
编辑
我得到的解释:
根据官方的说法,当生产者依赖于消费者时,它会等待消费者的工作完成然后开始工作,如果启用该选项,生产者会经历更多的空闲时间。但是,如果禁用该选项,由于并行性,生产者的空闲时间会减少。
启用选项不是很糟糕吗?由于 api 请求将需要更长的时间来处理,因为生产者将保持空闲的时间更长。为了澄清我的意思。假设我想在我的控制器中排队后台作业
public async Task<IActionResult> Action()
{
// some code
await _backgroundJobQueue(() => ....);
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
如果启用选项,那么生产者会经历更多的空闲时间,因此执行操作需要更长的时间?
我正在使用 nuxt + vuex 构建一个简单的应用程序。提交/调度时,我不断收到错误“未知操作/突变类型:名称”。另外,我的突变和操作不会显示在 vue devtools 中。另一方面,吸气剂和状态显示应有的样子。
商店/产品.js:
import getProducts from "~/api/products";
export const state = () => ({
all: [{ isAvailable: false }, { isAvailable: true }],
});
export const getters = {
available(state) {
return state.all.filter((p) => p.isAvailable);
},
};
export const actions = {
async fetchProducts(context) {
const response = await getProducts(true);
const products = await response.json();
context.commit("setProducts", products);
},
};
export const mutations = {
setProducts(state, products) {
state.products = products;
},
}; …Run Code Online (Sandbox Code Playgroud) asp.net-core ×1
asp.net-core-hosted-services ×1
c# ×1
javascript ×1
nuxt.js ×1
vue.js ×1
vuex ×1