昨日、C# に関する基本的な知識がまだ欠けている可能性が高いことに気付きました。
ステートレス Service Fabric アプリケーションがあります。メインの while ループの周りに try-catch があります。このループで例外をスローすると、while ループから抜け出し、サービスが効果的に停止します。throw
catch 句にa を追加すると、サービスが再起動します。
protected override async Task RunAsync(CancellationToken cancellationToken)
{
try
{
long iterations = 0;
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(3), cancellationToken).ConfigureAwait(false);
// Do stuff...
if (iterations > 4) {
throw new Exception();
}
ServiceEventSource.Current.ServiceMessage(this.Context, $"Working-{++iterations}");
}
}
catch (Exception ex)
{
// Log stuff...
throw;
}
}
誰かがこれがなぜなのかを説明したり、答えを得ることができる場所に私を案内したりできますか? この動作を説明するものは見つかりませんでした。
編集:「スロー」と「スローex」の違いはありますか?私が見る限り、なぜ関数が再度実行されているのか、私の質問の説明がないからです。そのトピックは、スタック トレースのthrow
とそれぞれの違いを説明することに関するものです。throw new