Interlocked.Increment 在 Dynamics Crm 插件中?
Interlocked.Increment in Dynamics Crm Plugin?
我想为 dynamics crm 插件实现一个内部计数器。但我不确定这对于多线程等是否是个好主意
会是这样的:
sealed class Counter
{
private int current = 0;
public int NextValue()
{
return Interlocked.Increment(ref this.current);
}
public void Reset()
{
this.current = 0;
}
}
这可能是 Dynamics 插件中的一个问题?
感谢您对此的看法。
不清楚这个计数器的用途是什么。是一些业务逻辑还是只是为了统计?
如果您需要实体编号计数器,则可以使用 OOB 功能https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/create-auto-number-attributes
D365 有分布式部署。同一插件可能在 FE、Async 或 Sandbox 应用程序域上 运行,通常每个插件都有多个实例。因此,如果您真的想编写自己的分布式计数器,则必须让它在任意数量的不同应用程序域上运行。多线程在这里无能为力。所有实例都必须依赖单一的事实来源。这必须是一些外部服务或组织数据库。
一些开发人员已经调查了这个问题并编写了带有代码片段的文章:
- http://charanmandya.blogspot.com/2015/06/auto-number-record-locking-in-mscrm.html
- https://www.akaes.com/blog/how-to-implement-robust-auto-numbering-using-transactions-in-microsoft-dynamics-crm/
- https://bettercrm.blog/2017/05/11/making-use-of-transactions-in-dynamics-365-customer-engagement/
P.S。市场上也有 autonumbering\counters 的商业解决方案。
我想为 dynamics crm 插件实现一个内部计数器。但我不确定这对于多线程等是否是个好主意
会是这样的:
sealed class Counter
{
private int current = 0;
public int NextValue()
{
return Interlocked.Increment(ref this.current);
}
public void Reset()
{
this.current = 0;
}
}
这可能是 Dynamics 插件中的一个问题?
感谢您对此的看法。
不清楚这个计数器的用途是什么。是一些业务逻辑还是只是为了统计?
如果您需要实体编号计数器,则可以使用 OOB 功能https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/create-auto-number-attributes
D365 有分布式部署。同一插件可能在 FE、Async 或 Sandbox 应用程序域上 运行,通常每个插件都有多个实例。因此,如果您真的想编写自己的分布式计数器,则必须让它在任意数量的不同应用程序域上运行。多线程在这里无能为力。所有实例都必须依赖单一的事实来源。这必须是一些外部服务或组织数据库。
一些开发人员已经调查了这个问题并编写了带有代码片段的文章:
- http://charanmandya.blogspot.com/2015/06/auto-number-record-locking-in-mscrm.html
- https://www.akaes.com/blog/how-to-implement-robust-auto-numbering-using-transactions-in-microsoft-dynamics-crm/
- https://bettercrm.blog/2017/05/11/making-use-of-transactions-in-dynamics-365-customer-engagement/
P.S。市场上也有 autonumbering\counters 的商业解决方案。