Загрузка данных
Вот код на C# для студента-новичка, без комментариев, с меню выбора всех 4 заданий по асинхронности:
```csharp
using System;
using System.IO;
using System.Threading.Tasks;
using System.Text;
class Program
{
static async Task Main()
{
while (true)
{
Console.WriteLine("\nВыберите задание:");
Console.WriteLine("1 - Асинхронное чтение файла");
Console.WriteLine("2 - Асинхронная запись в файл");
Console.WriteLine("3 - Параллельное чтение нескольких файлов");
Console.WriteLine("4 - Цепочка асинхронных задач");
Console.WriteLine("0 - Выход");
Console.Write("Ваш выбор: ");
string choice = Console.ReadLine();
if (choice == "0") break;
switch (choice)
{
case "1":
await Task1();
break;
case "2":
await Task2();
break;
case "3":
await Task3();
break;
case "4":
await Task4();
break;
default:
Console.WriteLine("Неверный выбор!");
break;
}
}
}
static async Task Task1()
{
string file = "test1.txt";
File.WriteAllText(file, "Это пример текста для асинхронного чтения.");
Task readTask = ReadFileAsync(file);
for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"Основной поток: сообщение {i}");
await Task.Delay(200);
}
await readTask;
}
static async Task ReadFileAsync(string file)
{
using (StreamReader reader = new StreamReader(file))
{
string content = await reader.ReadToEndAsync();
Console.WriteLine($"\nСодержимое файла: {content}");
}
}
static async Task Task2()
{
string file = "test2.txt";
string data = "Данные для асинхронной записи в файл.";
Task writeTask = WriteFileAsync(file, data);
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"Статус операции: запись выполняется... шаг {i}");
await Task.Delay(300);
}
await writeTask;
Console.WriteLine("Запись успешно завершена!");
using (StreamReader reader = new StreamReader(file))
{
string content = await reader.ReadToEndAsync();
Console.WriteLine($"Проверка: {content}");
}
}
static async Task WriteFileAsync(string file, string data)
{
using (StreamWriter writer = new StreamWriter(file))
{
await writer.WriteAsync(data);
}
}
static async Task Task3()
{
string file1 = "fileA.txt";
string file2 = "fileB.txt";
string file3 = "fileC.txt";
File.WriteAllText(file1, "Первый файл: Привет, мир!");
File.WriteAllText(file2, "Второй файл: Асинхронное программирование");
File.WriteAllText(file3, "Третий файл: Параллельное чтение файлов");
Task<string> task1 = ReadFileContentAsync(file1);
Task<string> task2 = ReadFileContentAsync(file2);
Task<string> task3 = ReadFileContentAsync(file3);
string[] results = await Task.WhenAll(task1, task2, task3);
Console.WriteLine("Результаты параллельного чтения:");
foreach (string result in results)
{
Console.WriteLine(result);
}
}
static async Task<string> ReadFileContentAsync(string file)
{
using (StreamReader reader = new StreamReader(file))
{
string content = await reader.ReadToEndAsync();
return content;
}
}
static async Task Task4()
{
string inputFile = "input.txt";
string outputFile = "output.txt";
string data = "Исходные данные: 10,20,30,40,50";
File.WriteAllText(inputFile, data);
Console.WriteLine("Создан исходный файл");
Task<string> readTask = ReadFileAsyncTask(inputFile);
Console.WriteLine("Запущено асинхронное чтение...");
string content = await readTask;
Console.WriteLine("Чтение завершено");
Task<int[]> processTask = ProcessDataAsync(content);
Console.WriteLine("Запущена обработка данных...");
int[] numbers = await processTask;
Console.WriteLine("Обработка завершена");
Task writeTask = WriteResultsAsync(outputFile, numbers);
Console.WriteLine("Запущена запись результатов...");
await writeTask;
Console.WriteLine("Все задачи выполнены!");
string result = await File.ReadAllTextAsync(outputFile);
Console.WriteLine($"Результат в файле: {result}");
}
static async Task<string> ReadFileAsyncTask(string file)
{
using (StreamReader reader = new StreamReader(file))
{
return await reader.ReadToEndAsync();
}
}
static async Task<int[]> ProcessDataAsync(string content)
{
return await Task.Run(() =>
{
string[] parts = content.Split(':', ',');
int[] numbers = new int[5];
int index = 0;
for (int i = 1; i < parts.Length; i++)
{
if (int.TryParse(parts[i].Trim(), out int num))
{
numbers[index] = num * 2;
index++;
}
}
return numbers;
});
}
static async Task WriteResultsAsync(string file, int[] data)
{
using (StreamWriter writer = new StreamWriter(file))
{
string result = "Обработанные данные: " + string.Join(", ", data);
await writer.WriteAsync(result);
}
}
}
```