while(allPeers.length > 0){
if(_bitField.havePiece() == -1){
writeln("already downloaded");
return;
}
auto bf = 0;
while(peerCount > maxPeer) {
bf = stats.byteReceived;
1.seconds.sleep();
writeln(formatBytes(stats.byteReceived - bf), " per second");
}
auto p = allPeers[$-1];
allPeers = allPeers[0..$-1];
peerCount++;
runTask((Peer peer) {
///debug writeln("Connecting peer: ", peer.ip, ":", peer.port);
connectPeer(peer.ip, peer.port);
peerCount--;
///debug writefln("Peer disconnected: %s:%s", peer.ip, peer.port);
}, p);
10.msecs.sleep();
}
Şeklinde bir kodum var. Burada vibe.d nin runTask ını kullanarak işlemler başlatıyorum ve yukarıda 1.seconds.sleep diyen yerde programı uyutuyorum ve bu sayede aynı anda aktif olan işlem sayısını sınırlayabiliyorum.
Buraya kadar sorun yok. Sorun connectPeer işleminden bir hata fırlatıldığı zaman bunun runTask içerisinde yakalanamaması ve 1 saniye uyku verdiğim yerden fırlatılması.
Bu normal mi? Kaçırdığım bir nokta mı var?
Zekeriya
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]