セッションの実装を作成しようとしています。それを完了するには、セッション タイムアウトを作成する必要があります。これを行うには、x 秒後に実行される Timer を使用する必要があると判断しました。ただし、そのタイマーが期限切れになる前に要求を受信した場合は、再スケジュールする必要があります。
だから、私はタイマーを持っています:
using System.Threading.Timer;
public class SessionManager {
private int timeToLive; //Initialized in the constructor.
private ConcurrentDictionary<Guid, Session> sessions; //Populated in establishSession. Removed in abandonSession.
public Session establishSession(...)
{
Session session = ...; //I have a session object here. It's been added to the dictionary.
TimerCallback tcb = abandonSession;
Timer sessionTimer = new Timer(tcb, null, timeToLive, Timeout.Infinite);
}
public void abandonSession(Object stateInfo)
{
//I need to cancel the session here, which means I need to retrieve the Session, but how?
}
public void refreshSession(Session session)
{
//A request has come in; I have the session object, now I need to reschedule its timer. How can I get reference to the timer? How can I reschedule it?
}
}
助けが必要なこと:
オブジェクト
sessionTimer
のメンバーにすることができました。Session
これにより、Timer オブジェクトにアクセスできるようになりますが、refreshSession()
「再スケジュール」する方法がわかりません。Session
inabandonSession()
コールバックへの参照を取得する方法はまだわかりません 。Session
でオブジェクトを送信する方法はありstateInfo
ますか?
オブジェクトにへの参照を保存し、呼び出しのためにオブジェクトのメソッドをコールバックに参照させることができると考えていSessionManager
ました。ずさんに見えたけど。どう思いますか?Session
Session
abandonSession()
追加情報が必要な場合はお知らせください。