我有一个简单的后台缓存更新器方法:
void StartBackgroundLookup( string username )
{
Action action = () =>
{
(...)//A 'lengthy' lookup here
Cache.Set(key, xxx, cachePolicy);
};
Task.Factory.StartNew(action).ContinueWith(task => MyErrorHandler(task.Exception), TaskContinuationOptions.OnlyOnFaulted);
}
错误处理程序是一个私有的非静态方法:
private void MyErrorHandler(Exception error)
{
//msg logged here
}
我的理解是否正确,即 StartBackgroundLookup 是一种方法的对象在任务完成之前不会被最终确定,即使它超出了范围(原因是在 lambda 中使用了 Cache,并且实例 MyErrorHandler 与 ContinueWith 一起使用)?
如果它是一次性对象并调用 dispose 会发生什么?