2017-12-29 50 views
0

私はいくつかのコードを持つ関数を持っている可能性があります。特定の時間よりも時間がかかる場合、機能の停止を継続したい。これをどのように実装できますか?私は解決策の下で試しましたが、実行を停止しません。長時間実行された場合のタイムアウトの設定方法は?

override func viewDidLoad() { 
    super.viewDidLoad() 
    let task = DispatchWorkItem { 
    self.myfunction() 
    } 


    DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: { 
     task.cancel() 
    }) 
    task.perform() 
} 

func myfunction() -> Void { 
    /*some codes that may take long time to complete*/ 
} 
+1

をタイムアウト5秒に依頼して、ここで設定要求を、時間を設定するには、Webサービスのためのこの

var stop:Bool! override func viewDidLoad() { super.viewDidLoad() stop = false let task = DispatchWorkItem { self.myfunction() } DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: { stop = true }) task.perform() } func myfunction() -> Void { if(stop) { // invalidate timer , break for loop or return } } 

//より良いアプローチを試してみて、それがキャンセルされているかどうかを確認する必要があります。 – Sulthan

答えて

0

機能

let urlRequest = NSMutableURLRequest(url: newUrl! as URL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0) 

     let queue = OperationQueue() 

     NSURLConnection.sendAsynchronousRequest(urlRequest as URLRequest, queue: queue) 
     { 

     } 
+0

これは、 'myfunction'の実行が開始される前にチェックしたいときに便利です。 'myfunction'内の現在の実行コマンドのコードの行に関係なく、タイムアウト後に停止できるようにしたい –

+0

実行するタスクの種類を指定する必要があります。 –

+0

これには時には時間がかかるWebサービス呼び出しが含まれています応答を得る。 –

関連する問題