2017-09-29 12 views
0

J'essaye d'obtenir le délai d'expiration de group.wait mais c'est toujours réussi.Pourquoi ce group.wait réussit toujours?

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() 
    } 
} 

Où est-ce que je me trompe?

merci

+0

Pourquoi attendez-vous que l'attente échoue ou expire? – rmaddy

+0

@rmaddy je veux obtenir le délai d'expiration. –

+1

Vous avez besoin de code que les appels attendent avant d'appeler congé. – rmaddy

Répondre

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) 

Si vous n'êtes pas terminé avec le groupe, ne le laissez pas.

+0

Donc je devrais faire une condition et puis partir, juste et autrement chaque fois que j'ai du succès? –

+0

Vous devez quitter le groupe lorsque vous souhaitez que les serveurs ne bloquent plus. Ce n'est pas clair ce que vous faites. Les groupes de répartition n'ont pas de sens à moins qu'il y ait une concurrence. Vous faites tout sur une seule file d'attente. Que voulez-vous que le groupe de distribution fasse? –

+0

Je ne fais que tester le fonctionnement des groupes. Donc, essayer de comprendre comment travailler avec la méthode. –