2017-09-29 6 views
0

私はgroup.waitからタイムアウトを取得しようとしていますが、これは常に成功します。なぜこのgroup.waitは常に成功するのですか?

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

私は間違っていますか?

あなたはグループで行われていない場合は、

+0

待機が失敗するかタイムアウトが発生するのはなぜですか? – rmaddy

+0

@rmaddyタイムアウトを取得したい。 –

+1

leaveを呼び出す前にwaitを呼び出すコードが必要です。 – rmaddy

答えて

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) 

、それを放置しないでください感謝します。

+0

だから私はいくつかの条件をし、その後、私は成功するたびに、そうでなければ、残す必要がありますか? –

+0

ウェイターがもうブロックしないようにするには、グループを離れる必要があります。あなたがしていることは非常に不明です。ディスパッチグループは、ある程度の同時性がなければ理にかなっていません。 1つのキューですべてをやっています。ディスパッチグループは何をしたいですか? –

+0

私はグループの仕組みをテストしています。だから、.waitメソッドを使って作業する方法を理解しようとしています。 –

関連する問題