aliyun / aliyun-openapi-net-sdk

Alibaba Cloud SDK for .NET
https://www.nuget.org/profiles/aliyun-openapi-sdk
Other
541 stars 625 forks source link

EndpointUserConfig.AddEndpoint方法存在并发问题 #396

Open colin-chang opened 3 years ago

colin-chang commented 3 years ago

https://github.com/aliyun/aliyun-openapi-net-sdk/blob/a2c710ba27a22b25ea2c43867da889b45459bd64/aliyun-net-sdk-core/Regions/EndpointUserConfig.cs#L16

上面代码中 endpoints 使用了非线程安全字典 Dictionary<string, ProductDomain>。在字典中查询key过程中其他线程对字典进行修改会导致InvalidOperationException,异常堆栈信息如下:

System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
   at Aliyun.Acs.Core.Regions.EndpointUserConfig.AddEndpoint(String product, String regionId, String domain)

建议将 endpoints 类型修改为线程安全的 ConcurrentDictionary<string, ProductDomain> 修复此问题 @AxiosCros