Ben*_*jol 2 c# lambda closures garbage-collection
我刚刚编写了一些代码来执行超时操作,如果异步任务需要很长时间才能处理,但我不清楚的是,是否以及什么时候超时实例将被处理掉(我认为它会在异步任务及时完成,但我不知道,或者如果我每次调用此代码时都要累积实例.
//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();
}
});
Run Code Online (Sandbox Code Playgroud)
(如果有任何帮助,ProcessTimeout类使用a System.Timers.Timer
)
目前还不清楚timeout
这里有什么或者做什么DoAsyncTask
,但有几点要点:
timeout
变量.它不会捕获变量的值 ...因此,如果您稍后在同一方法中设置timeout
为null或其他值,则原始值将不会保留在lambda表达式中.timeout
引用垃圾的内容Dispose
?这不会受到垃圾收集器的影响,除非你依赖终结器来召唤Dispose
你. 归档时间: |
|
查看次数: |
1068 次 |
最近记录: |