private void OnTimerExpired(object state)
{
List<uint> expiredRequests = new List<uint>();
// flag requests as expired.
lock (m_requests)
{
foreach (OperationContext request in m_requests.Values)
{
if (request.OperationDeadline < DateTime.UtcNow)
{
request.SetStatusCode(StatusCodes.BadTimeout);
expiredRequests.Add(request.RequestId);
}
}
}
// raise notifications.
lock (m_lock)
{
for (int ii = 0; ii < expiredRequests.Count; ii++)
{
if (m_RequestCancelled != null)
{
try
{
m_RequestCancelled(this, expiredRequests[ii], StatusCodes.BadTimeout);
}
catch (Exception e)
{
Utils.Trace(e, "Unexpected error reporting RequestCancelled event.");
}
}
}
}
}
#endregion