CancellationToken nicht schlucken
- Matt
Der häufigste Fehler im Umgang mit CancellationToken ist, ihn entgegenzunehmen und dann nicht weiterzugeben:
public async Task<List<Kunde>> Laden(CancellationToken token)
=> await _ctx.Kunden.ToListAsync(); // Token fehlt
Der Aufrufer kann abbrechen, es passiert aber nichts, weil die eigentliche Arbeit den Abbruch nie erfährt. Das fällt erst auf, wenn ein Nutzer eine Anfrage abbricht und der Server trotzdem dreißig Sekunden weiterarbeitet.
Dagegen hilft ein Analyzer:
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" PrivateAssets="all" />
Er meldet unter anderem genau diese Fälle, dazu blockierende Aufrufe wie .Result in asynchronem Code.