/*------------------------------------------------------------------------- * 功能描述:ResponseRelation * 作者:xulisong * 创建时间: 2018/12/19 17:25:01 * 版本号:v1.0 * -------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Timers; namespace Com.FirmLib { public class ResponseRelation { /// /// 枷锁对象 /// private object m_Lock = new object(); private List Data{ get; set; } private Timer m_Timer; public ResponseRelation():this(false) { } public ResponseRelation(bool autoClear) { m_Timer = new Timer(); Data = new List(); AutoClear = autoClear; } public bool AutoClear { get; set; } public void ClearNoAlived() { for (int i = Data.Count-1; i >-1; i--) { var relation = Data[i]; if (!relation.Key.TryGetTarget(out Task reference) || reference == null) { Data.RemoveAt(i); } } } public void Add(Task tr, RequestInfo requestInfo) { Data.Add(new ResponseRelation(tr, requestInfo)); if (Data.Count > 300) { ClearNoAlived(); } } public RequestInfo GetValue(Task tr) { RequestInfo result = null; for (int i = Data.Count - 1; i > -1; i--) { var relation = Data[i]; if (!relation.Key.TryGetTarget(out Task reference) || reference == null) { Data.RemoveAt(i); } else if(reference==tr) { result = relation.Value; } } return result; } public ResponseRelation(Task tr, RequestInfo requestInfo) { Key = new WeakReference>(tr); Value = requestInfo; } public WeakReference> Key { get;private set; } public RequestInfo Value { get;private set; } } }