たとえば、は、タイマーがガベージコレクションされないように、ここで行うようにタイマーインスタンスをリストに追加する必要がありますか?コールバックが匿名でない場合、aswerはyesですが、匿名であるため、匿名メソッドブロックでアクセス可能なメソッドブロックの変数は、匿名メソッドが完了したときにのみガベージコレクションされると思いますか?この場合、私が行っているようにREFを保存する必要はありません。:匿名メソッドでアクセス可能なメソッド変数はいつガベージコレクションされますか?
private static List<Timer> timers = new List<Timer>();
public static void RunCallbackAfter(Action callback, int secondsToWait)
{
Timer t = null;
t = new Timer(new TimerCallback(delegate(object state)
{
SomeThread.BeginInvoke(callback);
timers.Remove(t);
}), null, secondsToWait*1000, Timeout.Infinite);
timers.Add(t);
}
huh? – markmnl
ああ誇張してください。_closure_は、匿名メソッド – markmnl
からアクセス可能な変数の名前ですが、コールバックとタイマーは循環参照を形成します。コールバックへの外部参照があった場合、問題はありません(ただし、それがクロージャー内にあることを確認するために外部変数に触れなければならないことを除いて)... – bdonlan