/*-------------------------------------------------------------------------
* 功能描述: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; }
}
}