swiftにおいて、非同期処理によって複数のURLを取得し、処理終了後に命令を与える方法について質問です。

以下のコードのように url_arr にいくつかのURLを入力しておき、for文によってhtmlを取得し、それぞれのhtml長さを length_arr に保存します。全ての処理が終わったら length_arr を print したい、といった場合、どのような書き方が可能でしょうか?

ViewController.swift

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    var url_arr:[String] = ["http://yahoo.co.jp", "http://qiita.com", "http://apple.com"]
    var length_arr:[Int] = []

    @IBAction func button(sender: AnyObject) {
        length_arr=[]
        print("buttonpushed")
        for url in url_arr{
            self.url2length(url)
        }
        print(length_arr)
    }

    @IBAction func button2(sender: AnyObject) {
        print("button2pushed")
        print(length_arr)
    }

    func url2length(url: String) -> Void  {
        //print (url)
        let session = NSURLSession.sharedSession()
        let urll = NSURL(string:url)!
        let request = NSURLRequest(URL: urll)

        let task =
        session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
            if let data = data{
                let nsvalue = NSString(data: data, encoding: NSUTF8StringEncoding)
                let value = String(nsvalue)
                print(value.characters.count)
                self.length_arr.append(value.characters.count)
            }
        }
        task.resume()
    }

}

実行結果(信用度の関係でリンクを複数はれないようなのでhttp://は省略しました)
buttonpushed
yahoo.co.jp
qiita.com
apple.com
[]
36762
24884
16038
button2pushed
[36762, 24884, 16038]

dispatch groupを使用すると可能なようなので、該当部分を以下のように書き直しましたが、結果は変わりませんでした。

let dispatchGroupe = dispatch_group_create()
let queue = dispatch_queue_create("q1", DISPATCH_QUEUE_SERIAL)


@IBAction func button(sender: AnyObject) {
    length_arr=[]
    print("buttonpushed")
    for url in url_arr{
        dispatch_group_async(dispatchGroupe, queue, { () -> Void in
            self.url2length(url)
        })
    }
    dispatch_group_notify(dispatchGroupe, queue) { () -> Void in
        print(self.length_arr)
    }
}

(この場合はURLをGETするという三つの命令が終了した段階でnotifyが実行されてしまっているのでしょうか。)
理想としては最初の print length_arr の段階で三つの要素のあるarrayが表示されて欲しいのですが、どこを直せば良いのか、ご教授ください。

よろしくお願いします。