Пример кода из реального проекта (упростил):
public Task<Something> TryGetSomethingAsync(string arg)
{
try
{
return GetSomethingAsync(arg);
}
catch (SomeException ex) // Nope.
{
throw HandleException(ex, arg);
}
}
Сопротивление бесполезно, угу
Как насчёт диагностики "утекания" промайза из области, обёрнутой в try{...} / using{...} ?
Промайза — т.к. кроме собственно Task<> так же может выстрелить любой awaitable тип (ValueTask, Task.ConfigureAwait() etc).
Если совсем заморочиться, то можно попытаться то же самое добавить для ленивых enumerable, но для них будет слишком много ложных срабатываний.