0

シンプルなバックグラウンド キャッシュ アップデータ メソッドがあります。

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 がメソッドであるオブジェクトは、スコープ外になってもタスクが終了するまでファイナライズされないという私の理解は正しいですか (キャッシュがラムダで使用され、インスタンス MyErrorHandler が ContinueWith で使用される理由)?

それが使い捨てオブジェクトで、dispose が呼び出された場合はどうなりますか?

4

2 に答える 2

0

所有するオブジェクトはStartBackgroundLookup、完了する前にガベージ コレクションされる場合がありますTask.Factory.StartNew(action)。これらの 2 つは、内部でオブジェクト自体への参照を持っていない限り、何にも関連付けられていませんaction(たとえば、クロージャとして likevar clo = this;およびthis.Somethinginside アクションを使用しても、オブジェクト (参照できるオブジェクトthis) がガベージ コレクションされるのを防ぐことはできません)。

于 2013-06-12T04:20:41.620 に答える