项目场景:
比如一个仓储系统,可以切换仓房 ,每个仓房对接的设备链接不同 ,需要获取当前仓房的链接
这时候就需要一个公共量来表示这个链接,方便后续在不同的接口里调用,当多个用户操作这个系统时,需要保证这个公共量是当前用户操作的仓房链接
解决方案:
ConcurrentDictionary 这个可以有效保证线程安全
using Xhxx.Authorize;
using System.Configuration;
using System.Web.Http;
using Xhxx.Entity;
using ES.Web.Api;
using System.Net.Http;
using System.Web;
using System.Collections.Concurrent;
namespace System.Linq
{
#if DEBUG
[AllowAnonymous]
#endif
public class NBBaseController : BaseController
{
private static readonly ConcurrentDictionary<string, string> WmsUrlDic = new ConcurrentDictionary<string, string>();
//当前仓发链接
public string CurrentWmsUrl
{
get {
return WmsUrlDic.GetOrAdd(base.loginerBase.UserCode ?? "super","");
}
set {
WmsUrlDic.AddOrUpdate(base.loginerBase.UserCode ?? "super", value, (k, v) => value);
}
}
public NBBaseController()
{
}
protected void GetCruentWmsUrl(string StoreHouseCode)
{
lock (_locker)
{
switch (StoreHouseCode)
{
case "913302001440687412007":
WmsUrlDic.TryUpdate(base.loginerBase.UserCode ?? "super", ConfigurationManager.AppSettings["WmsUrl"], CurrentWmsUrl);
break;
case "913302001440687412036":
WmsUrlDic.TryUpdate(base.loginerBase.UserCode ?? "super", ConfigurationManager.AppSettings["WmsLkUrl"], CurrentWmsUrl);
break;
default:
WmsUrlDic.TryUpdate(base.loginerBase.UserCode ?? "super", "", CurrentWmsUrl);
break;
}
}
}
}
}
}