-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
131 lines (110 loc) · 3.96 KB
/
Program.cs
File metadata and controls
131 lines (110 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using System;
using System.Diagnostics;
using System.Threading.Tasks;
namespace AsyncAndAwaitEasy
{
internal class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Кухня открывается! Начинаем готовить обед...\n");
Chef chef = new Chef();
await chef.CookDinnerAsync();
Console.WriteLine("\nКухня закрывается. Обед готов!");
}
}
public class Chef
{
private Random _rand = new Random();
public async Task CookPastaAsync()
{
Console.WriteLine("Начинаю варить пасту");
await Task.Delay(3000);
Console.WriteLine("Паста готова!");
}
public async Task<string> PrepareSauceAsync()
{
Console.WriteLine("Готовлю томатный соус");
await Task.Delay(2000);
Console.WriteLine("Соус готов");
return "Томатный соус";
}
public async Task<string[]> PrepareSaladAsync()
{
Console.WriteLine("Нарезаю овощи для салата");
var tasks = await Task.WhenAll(
ChopTomatoesAsync(),
ChopCucumbersAsync(),
ChopPeppersAsync()
);
Console.WriteLine($"Салат готов: {string.Join(", ", tasks)}");
return tasks;
}
public async Task BakeMeatAsync()
{
try
{
Console.WriteLine("Запекаю мясо");
await Task.Delay(4000);
if (_rand.NextDouble() < 0.3)
{
throw new Exception("Духовка сломалась!");
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Мясо готово в духовке!");
Console.ResetColor();
}
}
catch (Exception ex)
{
var originalColor = Console.ForegroundColor;
try
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"\nОшибка: {ex.Message}");
}
finally
{
Console.ForegroundColor = originalColor;
}
try
{
Console.WriteLine("Готовим на сковороде");
await Task.Delay(1000);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Мясо готово на сковороде!");
}
finally
{
Console.ForegroundColor = originalColor;
}
}
}
public async Task CookDinnerAsync()
{
Stopwatch timer = new Stopwatch();
timer.Start();
await Task.WhenAll(CookPastaAsync(), PrepareSauceAsync(), PrepareSaladAsync());
await BakeMeatAsync();
timer.Stop();
Console.WriteLine($"\nОбщее время приготовления: {(int)timer.Elapsed.TotalSeconds} сек");
}
private async Task<string> ChopTomatoesAsync()
{
await Task.Delay(1000);
return "Помидоры";
}
private async Task<string> ChopCucumbersAsync()
{
await Task.Delay(1500);
return "Огурцы";
}
private async Task<string> ChopPeppersAsync()
{
await Task.Delay(1000);
return "Перец";
}
}
}