2016-04-23 11 views
-1

シミュレーションでmastertaskworkerを送信することがあります。この場合、taskは失われますが、masterはこのタスクを再送する必要があります。私は、このために、このようなコードを使用しますSimGrid。壊れたリンクでタスクを送信

boolean send = false; 
    label : while (!send){ 
     try { 
      task.send("Tier1_" + i); 
      send = true; 
      break; 
     }catch (TransferFailureException e){ 
      waitFor(1); 
      continue label; 
     } 
    } 

をしかし、それはまだ得られます

org.simgrid.msg.TransferFailureException 
    at org.simgrid.msg.Task.receive(Native Method) 
    at org.simgrid.msg.Task.receive(Task.java:271) 
    at LHCb.Tier1.main(Tier1.java:35) 
    at org.simgrid.msg.Process.run(Process.java:338) 
[Tier1_7:LHCb.Tier1:(8) 10.000000] [jmsg/INFO] Unexpected behavior. Stopping now 

それを避けるために、どのように?

+0

これはJavaの問題であり、SimGridの問題ではないので、私は質問に投票しました。 –

答えて

1

短い答えはとなります。名前はcontinue、Javaの例外はです。ここで長い答えがあります。

これが本当にあなたのコードの場合は、ラベルを削除して続行するようにしてください。あなたのwhileループは、それなしでトリックを行う必要があります。

しかし、これは大きなプロジェクトのMWEが縮小されていると思われます。いずれにしても、あなたのラベルは醜いものです。これは適切なJavaで行うべきことではありません。私はあなたがその構造を削除するためにあなたの全体のコードを考え直すべきだと思います。

私は今インターネット上で決定的な答えを見つけることはできませんが、そのようなgotoでcatchブロックを終了するとJavaが悪いと思う(continue + label = goto)。同様のケースです:Using 'continue with label' to reach an inner for loop

+0

http://stackoverflow.com/questions/36817190/simgrid-dsend-by-broken-link –

関連する問題