2016-11-09 119 views
-1

我想做一個網絡爬行,目前我正在閱讀12000個URL的txt文件,我想在這個過程中使用併發,但請求不起作用。如何在swift中同步異步HTTP請求3,沒有AlamoFire

typealias escHandler = (URLResponse?, Data?) -> Void 

func getRequest(url : URL, _ handler : @escaping escHandler){ 

let session = URLSession( 
    configuration: .default, 
    delegate: nil, 
    delegateQueue: nil) 

var request = URLRequest(url:url) 

request.httpMethod = "GET" 

let task = session.dataTask(with: request){ (data,response,error) in 

     handler(response,data)  
} 

task.resume() 

} 


    for sUrl in textFile.components(separatedBy: "\n"){ 
     let url = URL(string: sUrl)! 

     getRequest(url: url){ response,data in 

      print("RESPONSE REACHED") 

     } 
    } 

回答

0

如果您有URLSessions正常工作,你需要去爲創建單獨的OperationQueue創建爲每個你想完成你的異步任務的Operation,將其添加到您的操作隊列,並設置OperationQueue的maxConcurrentOperationCount到控制一次可以運行多少個任務。 Puesdo代碼:

let operationQueue = OperationQueue() 
operationQueue.qualityOfService = .utility 

let exOperation = BlockOperation(block: { 
    //Your URLSessions go here. 
}) 
exOperation.completionBlock = { 
    // A completionBlock if needed 
} 

operationQueue.addOperation(exOperation) 
exOperation.start() 

使用OperationQueue子類和Operation子類將爲您提供用於處理多個線程的其他實用程序。

+0

謝謝雅各布,你的建議非常適合這個問題。 – eduardo

+0

@eduardo - 這並不是那麼簡單,因爲您要添加到隊列中的這些任務本身就是異步的。所以你必須創建異步操作。請參閱http://stackoverflow.com/a/40560463/1271826。 – Rob