gpt4 book ai didi

c# - 为多线程请求重用或创建新的 IOrganizationService

转载 作者:行者123 更新时间:2023-11-30 16:51:22 25 4
gpt4 key购买 nike

我有时会将大量数据推送到 CRM 中,例如批量更新。它是在工作流 (CodeActivity) 类中使用其 Execute() 方法完成的。我可以使用传递给该方法的参数(上下文)来获取 ServiceFactory,然后依次创建 IOrganizationService。

然后我迭代一个对象列表以更新、更改属性并调用 service.Update(myObj)。到目前为止一切顺利。

现在,为了加快速度,我想我会运行 2-4 个并行执行更新的线程。

问题 1如果我运行两个或更多线程,我应该重用刚刚创建的服务还是创建一个新服务? IE。每个线程创建一个服务,还是共享它?

我基本上是在执行 Parallel.Invoke(action1, action2, action3);,其中每个操作都需要一个服务实例来调用 service.Update(myObj);

问题 2如果调用 serviceFactory.CreateOrganizationService(context.UserId),它实际上会创建一个新服务,还是返回一个现有服务?

我已经确定了其他一切,它工作得很好,但想要在工作流的 Execute() 方法中进行多线程时获得建议/最佳实践。

最佳答案

如果您的应用程序的多线程实际上会提高性能,我会感到有点惊讶(但如果您可以发布相反的数据,我很乐意看到它)

问题 1:

在客户端使用的 CrmOrganizationService 不是线程安全的,我怀疑实现 IOrganizationService 的服务器版本是否也是线程安全的。

问题 2:

我不知道 Microsoft 指定了一种或另一种方式,所以这会让我相信无论答案是什么,你都不能指望它。该界面未定义答案,因此可能会在下一次更新时更改。话虽如此,我还是要自己测试一下:

if(Object.ReferenceEquals(serviceFactory.CreateOrganizationService(context.UserId), serviceFactory.CreateOrganizationService(context.UserId)){
throw new Exception("Returns the same IOrganizationService");
}

throw new Exception("Returns a new IOrganizationService");

关于c# - 为多线程请求重用或创建新的 IOrganizationService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33971600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com