dotnet / dotnet/command-line-api

System.CommandLine silently swallows OperationCanceledException and TaskCanceledException

Aperta
#2,808 2 commenti 1 reazione 0 assegnatari Vedi su GitHub
Lingua principale
C#
Stelle
3.7k
Fork
428
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

### Repro

```cs
#:package System.CommandLine@2.0.8
using System.CommandLine;

// This stack trace won't print to the console
Func throwException = parseResult =>
{
throw new OperationCanceledException();
// Also doesn't work:
// throw new TaskCanceledException();
};

// This works as expected.
// Func throwException = parseResult => { throw new Exception(); };

var root = new RootCommand();
root.SetAction(throwException);
var parseResult = root.Parse(args);
return parseResult.Invoke();
// still returns exit code 1
```

`dotnet run Repro.cs`

### Expected behavior

I see the stack trace for the `OperationCanceledException`.

### Actual behavior

There is no output.

### Additional details

As a developer trying to debug why my application crashed with no output, this behavior is frustrating.
If I wanted to exit gracefully (e.g. if the user pressed Ctrl-C), then I would expect to have to catch an exception at some point, instead of System.CommandLine swallowing it for me.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia eseguendo il file fornito Repro.cs con System.CommandLine 2.0.8 e confronta il comportamento di RootCommand.SetAction, Parse e parseResult.Invoke per le eccezioni ordinarie e di annullamento. Traccia il percorso di invocazione per trovare dove OperationCanceledException e TaskCanceledException vengono ignorate. Il lavoro è completo quando le eccezioni di annullamento producono lo stack trace previsto, mentre il comportamento esistente per le eccezioni ordinarie rimane invariato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
cli
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.