匿名メソッドの変数キャプチャ

基本的な大事なことです。
Javascriptのクロージャと同じ考え方です。。。
ど忘れしてましたので再確認を兼ねて書き置きします。

//非同期でFriendGridにイメージを追加していく  (ダメバージョン)
Task.Factory.StartNew(() => {
    foreach (var friend in ViewModel.Friends)
    {
        //ループで一意な変数がキャプチャされるので、全て末尾要素が選択されてしまう。
        Dispatcher.BeginInvoke(new Action(() => {
                FriendGrid.Children.Add(new Image(){DataContext = friend}); 
            })
            , System.Windows.Threading.DispatcherPriority.Background, null
        );
    }
}); 
//非同期でFriendGridにイメージを追加していく  (OKバージョン)
Task.Factory.StartNew(() => {
    foreach (var friend in ViewModel.Friends)
    {
        var f = friend;  //ループ内にローカル変数を追加。匿名メソッドがこの変数をキャプチャするようにする。
        Dispatcher.BeginInvoke(new Action(() => {
                FriendGrid.Children.Add(new Image(){DataContext = f}); 
            })
            , System.Windows.Threading.DispatcherPriority.Background, null
        );
    }
});