|
@@ -446,6 +446,80 @@ static async void FactorialAsync(int n)
|
|
|
|
|
|
Process finished with exit code 0.
|
|
Process finished with exit code 0.
|
|
```
|
|
```
|
|
|
|
+## поломанный код
|
|
|
|
+```
|
|
|
|
+static async void FactorialAsync(int n)
|
|
|
|
+{
|
|
|
|
+ Task task = null;
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ task = Task.Run(()=>Factorial(n));
|
|
|
|
+ await task;
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ Console.WriteLine(task.Exception.InnerException.Message);
|
|
|
|
+ Console.WriteLine($"IsFaulted: {task.IsFaulted}");
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+```
|
|
|
|
+error
|
|
|
|
+```
|
|
|
|
+## эксепшен не эксепшен, вывод с неба упал
|
|
|
|
+```
|
|
|
|
+static async Task DoMultipleAsync()
|
|
|
|
+{
|
|
|
|
+ Task allTasks = null;
|
|
|
|
+
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ Task t1 = Task.Run(()=>Factorial(-3));
|
|
|
|
+ Task t2 = Task.Run(() => Factorial(-5));
|
|
|
|
+ Task t3 = Task.Run(() => Factorial(-10));
|
|
|
|
+
|
|
|
|
+ allTasks = Task.WhenAll(t1, t2, t3);
|
|
|
|
+ await allTasks;
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ Console.WriteLine("Исключение: " + ex.Message);
|
|
|
|
+ Console.WriteLine("IsFaulted: " + allTasks.IsFaulted);
|
|
|
|
+ foreach (var inx in allTasks.Exception.InnerExceptions)
|
|
|
|
+ {
|
|
|
|
+ Console.WriteLine("Внутреннее исключение: " + inx.Message);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+```
|
|
|
|
+Исключение: -3 : число не должно быть меньше 1
|
|
|
|
+IsFaulted: True
|
|
|
|
+Внутреннее исключение: -3: число не должно быть меньше 1
|
|
|
|
+Внутреннее исключение: -5: число не должно быть меньше 1
|
|
|
|
+Внутреннее исключение: -10: число не должно быть меньше 1
|
|
|
|
+```
|
|
|
|
+## никакой возможности нет, это афера
|
|
|
|
+```
|
|
|
|
+static async void FactorialAsync(int n)
|
|
|
|
+{
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ await Task.Run(() => Factorial(n)); ;
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ await Task.Run(()=>Console.WriteLine(ex.Message));
|
|
|
|
+ }
|
|
|
|
+ finally
|
|
|
|
+ {
|
|
|
|
+ await Task.Run(() => Console.WriteLine("await в блоке finally"));
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+```
|
|
|
|
+```
|
|
|
|
+error
|
|
|
|
+```
|
|
### // Отмена асинхронных операций
|
|
### // Отмена асинхронных операций
|
|
```
|
|
```
|
|
using System;
|
|
using System;
|