Ich bin Hintergrund Thread in einer While-Schleife, wo ich einige Datei-Handling-Aufgabe. Ich habe einen Code nach der Schleife. Aber die Codes nach der Schleife, die ausgeführt wird, bevor die Schleife endet (weil ich Hintergrundthread verwende). Gibt es irgendeine Möglichkeit, Code genau nach Ablauf der Schleife auszuführen?Run Code nach Schleife im Hintergrund endet
Hier ist mein Code:
while i < testCount {
let task = AsyncTask(
backgroundTask: {
() -> Double in
// some file handling
return 234.09
},
afterTask: {
(val: Double) in
self.showVal(val)
}
);
task.execute();
i += 1
}
// I want to run this code after the loop ends
print("average: \(avg)")
showVal(avg)
Meine showVal(Double)
Funktion
func showVal(val: Double) {
print("val found: \(val)")
display.text = "\(val) found"
}
Und hier ist meine AsyncTask
Klasse
public class AsyncTask <BGParam,BGResult>{
private var pre:(()->())?;//Optional closure -> called before the backgroundTask
private var bgTask:(param:BGParam)->BGResult;//background task
private var post:((param:BGResult)->())?;//Optional closure -> called after the backgroundTask
public init(beforeTask: (()->())?=nil, backgroundTask: (param:BGParam)->BGResult, afterTask:((param:BGResult)->())?=nil){
self.pre=beforeTask;
self.bgTask=backgroundTask;
self.post=afterTask;
}
public func execute(param:BGParam){
pre?()//if beforeTask exists - invoke it before bgTask
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), {
let bgResult=self.bgTask(param: param);//execute backgroundTask in background thread
if(self.post != nil){//if afterTask exists - invoke it in UI thread after bgTask
dispatch_async(dispatch_get_main_queue(),{self.post!(param: bgResult)});
}
});
}
}
Hinweis: Ich bin ein Anfänger in Swift
.
Edit: Ich möchte eigentlich tun:
- Ein Hintergrund-Datei Handhabung Aufgabe
- Nachdem die Aufgabe beendet ist, möchte ich in einem UILabel
ich einen Text zeigen, müssen diese zwei Aufgaben mehrmals (sagen wir 100 mal). Wenn swift einfachere Methoden für meinen Zweck hat, bitte informieren.
Die pragmatische Option wäre einfach, einen if-check auf Ihrem Zähler zu haben und den Code daraus auszuführen. Auch auf einer kleinen, schnellen Code-ähnlichen Notiz würde ich vorschlagen, 'für i in 0 ..
Okay. Kannst du bitte meine Änderungen sehen, habe ich meinen eigentlichen Zweck erwähnt. –
Also, lass mich sehen, ob ich das richtig verstanden habe. Sie müssen eine Hintergrund-Datei-Behandlung eine unbekannte Anzahl von Zeiten durchführen, und wenn alle diese abgeschlossen sind, möchten Sie etwas anderes tun (?) –