Есть ли в асинхронном C# методы catch и then?

Извините за глупый вопрос, но меня интересует есть асинхронном C# методы catch и then ? Можно сделать такой код например ?

let calc=(a, b)=>{
    return new Promise((resolve, reject)=>{
    let t=a+b;
     if(t==10){
         resolve(t);
     } else{
         reject(new Error(`No Number ${t}`));
      }
     }
    )}
    calc(7,8).then(re=>console.log(re)).
    catch(err=>console.log(err.message));

Ответы (2 шт):

Автор решения: Aziz Umarov

Так ответ на ваш вопрос.

// Создаём таск
var task = new Task<StateObject>(() => { /* action */ });

// На случай ошибки 
task.ContinueWith(t => { /* error handling */ }, context, 
TaskContinuationOptions.OnlyOnFaulted);

// Успешный случай 
task.ContinueWith(t => { /* on success */ }, context, 
TaskContinuationOptions.OnlyOnRanToCompletion);
// Пуск
task.Start();

Но async await по современнее.

try {
  var res = await calc(a,b);
  Console.WriteLine(res);
} catch(Exception ex)
{
 Console.WriteLine(ex.Message);
}
→ Ссылка
Автор решения: aepot

Пример плохой, потому что здесь нет асинхронных операций, но синтаксически это может выглядеть так.

Func<int, int, Task<int>> calc = async (a, b)
    => (a + b) is int t && t == 10 ? t : throw new Exception($"No, number is {t}");

try
{
    int sum = await calc(7, 8);
    // .then
    Console.WriteLine(sum);
}
catch (Exception ex)
{
    // .catch
    Console.WriteLine($"{ex.Message}");
}

Вывод в консоль

No, number is 15

Более читабельный код асинхронного метода

private async Task<int> Calc(int a, int b)
{
   int t = a + b;
   if (t == 10) return t;
   throw new Exception($"No, number is {t}");
}
→ Ссылка