12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*-------------------------------------------------------------------------
- * 功能描述: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
- {
- /// <summary>
- /// 枷锁对象
- /// </summary>
- private object m_Lock = new object();
- private List<ResponseRelation> Data{ get; set; }
- private Timer m_Timer;
- public ResponseRelation():this(false)
- {
- }
- public ResponseRelation(bool autoClear)
- {
- m_Timer = new Timer();
- Data = new List<ResponseRelation>();
- 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<HttpResponseMessage> reference) || reference == null)
- {
- Data.RemoveAt(i);
- }
- }
- }
- public void Add(Task<HttpResponseMessage> tr, RequestInfo requestInfo)
- {
- Data.Add(new ResponseRelation(tr, requestInfo));
- if (Data.Count > 300)
- {
- ClearNoAlived();
- }
- }
- public RequestInfo GetValue(Task<HttpResponseMessage> tr)
- {
- RequestInfo result = null;
- for (int i = Data.Count - 1; i > -1; i--)
- {
- var relation = Data[i];
- if (!relation.Key.TryGetTarget(out Task<HttpResponseMessage> reference) || reference == null)
- {
- Data.RemoveAt(i);
- }
- else if(reference==tr)
- {
- result = relation.Value;
- }
- }
- return result;
- }
- public ResponseRelation(Task<HttpResponseMessage> tr, RequestInfo requestInfo)
- {
- Key = new WeakReference<Task<HttpResponseMessage>>(tr);
- Value = requestInfo;
- }
- public WeakReference<Task<HttpResponseMessage>> Key { get;private set; }
- public RequestInfo Value { get;private set; }
- }
- }
|