Читаем файлы асинхронно с await using!
Сейчас научимся читать файлы без блокировок и утечек памяти — с помощью
Подключим нужные библиотеки из стандартной библиотеки .NET:
Допустим, мы читаем файл обычным синхронным способом, без защиты:
Если возникнет исключение — потоки не будут закрыты. Ресурсы останутся висеть, и
Теперь перепишем этот код с безопасной конструкцией
Мы создаём поток с флагом
🔥 Благодаря этому, чтение файла идёт в фоне, а ресурсы гарантированно освобождаются после выхода из блока — даже при исключениях.
➡️ C# Ready | #практика
Сейчас научимся читать файлы без блокировок и утечек памяти — с помощью
await using
. Это удобно и безопасно: ресурсы освобождаются даже в случае ошибки, а чтение не тормозит основной поток.Подключим нужные библиотеки из стандартной библиотеки .NET:
using System;
using System.IO;
using System.Threading.Tasks;
Допустим, мы читаем файл обычным синхронным способом, без защиты:
FileStream fs = new FileStream("data.txt", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string text = await reader.ReadToEndAsync();
Если возникнет исключение — потоки не будут закрыты. Ресурсы останутся висеть, и
Dispose()
никто не вызовет.Теперь перепишем этот код с безопасной конструкцией
await using
:await using FileStream fs = new FileStream("data.txt", FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
using StreamReader reader = new StreamReader(fs);
string text = await reader.ReadToEndAsync();
Console.WriteLine(text);
Мы создаём поток с флагом
useAsync:
true
и оборачиваем его в await using
, чтобы автоматически вызвать Dispose()
.🔥 Благодаря этому, чтение файла идёт в фоне, а ресурсы гарантированно освобождаются после выхода из блока — даже при исключениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6❤5
С их помощью можно легко преобразовывать строки и числа в нужные типы, такие как int, double, bool, а также выполнять универсальное преобразование с помощью ChangeType и работать с Base64 для сериализации и передачи данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🤝10👍7❤4
В этой статье:
• Установка и базовая настройка библиотеки Accord.NET
• Загрузка и предварительная подготовка набора данных
• Тестирование, оценка точности и прогнозирование результатов
🟡 Рекомендую прочитать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍5🔥5
Делаем консольную утилиту на C#, которая находит номера, начинающиеся с +7 или 8, и приводит их к единому формату
В этой задаче:
• Используем регулярное выражение для поиска номеров с любыми разделителями.
• Извлекаем нужные цифры, игнорируя пробелы, скобки и тире.
• Форматируем найденные номера в удобный и читаемый вид.
Полезно, когда нужно унифицировать контактную информацию в текстах, базах данных и логах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38🤝7❤5👍2👎1
Возвращаем несколько значений с помощью Tuples и деконструкции!
В C# часто возникает ситуация, когда метод должен вернуть сразу несколько значений. Раньше для этого использовали out‑параметры или создавали отдельные классы и структуры.
Теперь можно вернуть несколько значений напрямую, без лишнего шаблонного кода, а затем удобно их распаковать
Для начала подключим нужную библиотеку:
Теперь опишем метод, который возвращает кортеж из двух значений:
Вызовем метод и используем деконструкцию, чтобы сразу получить оба значения:
Вот что получится при запуске:
🔥 Благодаря
➡️ C# Ready | #практика
В C# часто возникает ситуация, когда метод должен вернуть сразу несколько значений. Раньше для этого использовали out‑параметры или создавали отдельные классы и структуры.
Теперь можно вернуть несколько значений напрямую, без лишнего шаблонного кода, а затем удобно их распаковать
Для начала подключим нужную библиотеку:
using System;
Теперь опишем метод, который возвращает кортеж из двух значений:
public (int Sum, int Product) Calculate(int a, int b)
{
return (a + b, a * b);
}
Вызовем метод и используем деконструкцию, чтобы сразу получить оба значения:
var (sum, product) = Calculate(3, 4);
Console.WriteLine($"Sum: {sum}, Product: {product}");
Вот что получится при запуске:
Sum: 7, Product: 12
🔥 Благодаря
Tuple
и деконструкции ты можешь возвращать несколько значений без лишнего кода и out‑параметров.Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥13👍7
👍9❤4🔥4
Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
Поэтому,
lock
помогает писать стабильный и предсказуемый многопоточный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤7👍6🤝3