Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в 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
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь вы найдёте базовые руководства по синтаксису языка, подробное описание сборок и отражения, работу с потоками и файлами, сетевое программирование, оптимизацию приложений и встроенные тесты для самопроверки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥4
Они позволяют упростить логику проверки на null, безопасно извлекать значения и подставлять значения по умолчанию без лишнего кода. Отлично подходят для случаев, когда нужно работать с value-типами, но предусмотреть возможность их отсутствия.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🤝10👍6❤4
👍6🔥4❤1
Init-only свойства для безопасной инициализации объекта!
Сейчас научимся задавать значения свойств только при создании объекта — с помощью аксессора
Для начала подключим стандартные библиотеку
Опишем простой класс
Создадим экземпляр объекта и зададим значения свойств через инициализатор:
Попробуем изменить значение после создания объекта — компилятор не даст этого сделать:
🔥
➡️ C# Ready | #практика
Сейчас научимся задавать значения свойств только при создании объекта — с помощью аксессора
init
. Удобно для создания неизменяемых структур без лишнего шаблонного кода.Для начала подключим стандартные библиотеку
using System;
Опишем простой класс
Person
с двумя свойствами, доступными только для инициализации:class Person
{
public string Name { get; init; }
public int Age { get; init; }
}
Создадим экземпляр объекта и зададим значения свойств через инициализатор:
var person = new Person
{
Name = "Анна",
Age = 28
};
Console.WriteLine($"{person.Name}, {person.Age} лет");
Попробуем изменить значение после создания объекта — компилятор не даст этого сделать:
person.Age = 29; // Ошибка: свойство доступно только для инициализации
🔥
Init-only
свойства позволяют задать значение один раз и гарантируют неизменяемость объекта после созданияPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤11👍7🤝1
Пишем функцию
TruncateByWord
на , которая обрезает входной текст до заданного числа символов, не разрывая слова, и добавляет «…» в конце.В этой задаче:
• Проверяем, не превышает ли длина текста лимит — если нет, возвращаем исходную строку без изменений.
• Обрабатываем слишком маленький лимит): возвращаем строку только из точек нужной длины.
• Если пробел не найден, обрезаем ровно по чистому лимиту и добавляем «…».
Полезно, когда нужно показывать превью длинного текста так, чтобы они не обрывались посередине слова и оставались читабельными.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥11❤6🤝1