2017-09-29 2 views
0

Ich versuche, Timeout von group.wait zu bekommen, aber das ist immer erfolgreich.Warum diese Gruppe.wartet immer erfolgreich?

blueGroup.enter() 
for i in 1...1000000 { 
    print(i) 
} 
blueGroup.leave() 

let time: DispatchTime = .now() + .seconds(1) 
let result = blueGroup.wait(timeout: time) 

print("finished \(result)") // always success 


let redGroup = DispatchGroup() 
redGroup.enter() 
for i in 0...300000 { 
    print(i/(i + 1)) 
    if i == 300000 { 
     print(i) 
     let result = redGroup.wait(timeout: .now() + .seconds(10)) 
     print(result) // always timeout 
     redGroup.leave() 
    } 
} 

Wo bin ich falsch?

danke

+0

Warum erwarten Sie, dass die Wartezeit fehlschlägt oder Timeout? – rmaddy

+0

@rmaddy Ich möchte Timeout bekommen. –

+1

Sie benötigen Code, der Anrufe vor dem Verlassen anruft. – rmaddy

Antwort

0
blueGroup.enter() // Now the Blue Group will block waiters 
for i in 1...1000000 { 
    print(i) 
} 
blueGroup.leave() // Blue group leaves match enters, so no blocking 

let time: DispatchTime = .now() + 0.001 
print(time)  
let result = blueGroup.wait(timeout: time) // Nothing blocking, so moving on 

print("finished \(result)") // finished success (as expected) 

Wenn Sie mit der Gruppe nicht fertig sind, kann es nicht lassen.

+0

Also sollte ich eine Bedingung machen und dann gehen, richtig und sonst jedes Mal, wenn ich Erfolg habe? –

+0

Sie sollten die Gruppe verlassen, wenn die Kellner nicht mehr blockieren sollen. Es ist sehr unklar, was du tust. Dispatch-Gruppen ergeben keinen Sinn, es sei denn, es gibt Nebenläufigkeit. Sie machen alles in einer einzigen Warteschlange. Was soll die Versandgruppe tun? –

+0

Ich teste gerade, wie Gruppen arbeiten. Also versuche herauszufinden, wie man mit .wait Methode arbeitet. –

Verwandte Themen