我刚刚编写了一些代码来执行超时操作,如果异步任务需要很长时间来处理,但我不清楚的是,是否以及何时将超时实例处理掉(我认为它将在异步任务及时完成的情况下,否则我不知道),或者如果我每次调用此代码时都要累积实例。
//StartNew creates a new instance of System.Timers.Timer, and
// invokes the ActionOnTimeout after 2000ms, unless calling code
// calls "Stop" first
var timeout = ProcessTimeout.StartNew(() => ActionOnTimeout(), 2000);
//DoAsyncTask creates a new thread, does potentially slow stuff,
/// then invokes this callback
DoAsyncTask(() =>
{
if(timeout.Running)
{
timeout.Stop();
DoCallbackStuff();
}
});
(如果有任何帮助,ProcessTimeout类使用System.Timers.Timer
)
答案 0 :(得分:6)
目前尚不清楚timeout
在这里是什么或DoAsyncTask
是什么,但有几个一般要点:
timeout
变量。它不会捕获变量的值 ...因此,如果您稍后在同一方法中将其设置为null或其他值,则原始值将赢得' t在lambda表达式中保存。timeout
引用的任何内容被垃圾回收,只要委托本身不符合垃圾回收的条件timeout
?这不会受到垃圾收集器的影响,除非您依赖于为您调用Dispose
的终结器。