C# Ready | Unity
10.6K subscribers
1.52K photos
84 videos
756 links
Авторский канал по разработке на C# и Unity.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Cотрудничество: @energy_c

Реклама на бирже: https://telega.in/channels/csharp_ready/card

РКН: https://clck.ru/3SBaT3
Download Telegram
📱 Async/await против корутин в Unity!

Кратко сравниваем задачи C# и корутины Unity, показывая, где каждая техника эффективнее в реальных сценариях.

Что важно знать:

• Ошибки ловятся сразу;

•
Отмена делается просто;

•
Изображение остаётся плавным.


Совмещая задачи и корутины, ты получишь чистый код и устойчивую производительность во всех игровых ситуациях.

➡️ C# Ready | #unity
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍6❤4🤝3
Параллельная обработка коллекции через Parallel.ForEach!

Когда нужно быстро выполнить CPU-интенсивную работу над большим набором данных, можно распараллелить обработку без сложной ручной работы с потоками:
// Исходная коллекция—скажем, список чисел
var numbers = new int[1_000_000];
new Random().NextBytes(new Span<byte>(new byte[0])); // просто для примера
for (int i = 0; i < numbers.Length; i++)
numbers[i] = i;


Вызовем Parallel.ForEach, соберём результаты в потокобезопасную коллекцию и зададим максимальное число параллельных задач:
var results = new ConcurrentBag<int>();
var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };

Parallel.ForEach(numbers, options, number =>
{
// эмуляция тяжёлой работы
int squared = number * number;
results.Add(squared);
});


ConcurrentBag<T> гарантирует, что в него можно безопасно записывать из разных потоков без блокировок:
Console.WriteLine($"Обработано элементов: {results.Count}");
Console.WriteLine($"Первый результат: {results.Min()} | Последний: {results.Max()}");


🔥 Совет: поэкспериментируйте с MaxDegreeOfParallelism — на некоторых задачах меньшее число потоков даёт лучшее быстродействие за счёт меньшего оверхеда переключений.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤1
👩‍💻 Мгновенный аплоад в Google Drive!

С помощью пары методов перенесите любой файл на диск, получив мгновенную ссылку для удобного просмотра.

Что важно знать:

• Файл доступа рядом;

• Доступ только нужный;

• Большие файлы делим.


Автоматизируйте рутину и делитесь ссылками моментально, экономя время коллег и клиентов при повторных операциях загрузки.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥6👍4😁2👎1
Отслеживаем изменения в папке через FileSystemWatcher — мгновенный отклик без опроса!

Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.

Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только .txt-файлов, подписываемся на события Created и Changed:
using System.IO;

string path = @"C:\Watched";
using var watcher = new FileSystemWatcher(path, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
IncludeSubdirectories = false,
// или true — если нужны подпапки
EnableRaisingEvents = true
// запускаем слежение
};

watcher.Created += OnChanged;
watcher.Changed += OnChanged;


Обработчик получает данные об изменении и выводит краткую информацию:
static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {e.ChangeType}: {e.FullPath}");
}


Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
Console.WriteLine($"👀 Слежение за {path} запущено. Нажмите Enter для выхода…");
Console.ReadLine();


🔥 FileSystemWatcher избавляет от циклов опроса: оперативно, без лишних ресурсов и под любые типы файлов.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥11❤10
👩‍💻 Console вывод без границ!

Освой ключевые методы для текстовых интерфейсов. Пиши ярко, читай гибко, управляй курсором и цветами как настоящий профи в C# приложениях.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝48🔥16❤9👍5
👍6❤3🔥3😁1
Что же выведет консоль?
Anonymous Quiz
6%
A
79%
B
4%
C
11%
D
❤6👍6🔥4
👩‍💻 Разбираем readonly struct — как запретить изменения без лишних затрат?

Этот тип фиксирует все значения на этапе создания и исключает любые дальнейшие изменения.

Что важно знать:

• Нельзя менять поля;

• Нет скрытых действий;

• Меньше ошибок в коде.


Используется там, где нужно гарантировать стабильность значений без усложнения архитектуры.

➡ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7❤4
Горячая перезагрузка конфигурации через IOptionsMonitor — мгновенные изменения без рестарта!

Иногда DevOps-ам нужно править лимиты или строки подключения прямо в appsettings.json, а пользователям нельзя прерывать сервис. Подключаем «живую» конфигурацию и реагируем на правки на лету.

Подготавливаем конфиг с reloadOnChange и DI-контейнер:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", reloadOnChange: true)
.Build();

var services = new ServiceCollection()
.AddSingleton<IConfiguration>(config)
.Configure<MySettings>(config.GetSection("MySettings"))
.AddSingleton<Worker>()
.BuildServiceProvider();

// запускаем
services.GetRequiredService<Worker>();
Console.ReadLine();


Регистрируем класс настроек и ловим изменения:
public record MySettings(int Limit, string Message);

public class Worker
{
public Worker(IOptionsMonitor<MySettings> opts) =>
opts.OnChange(s =>
Console.WriteLine($"↻ Новый лимит: {s.Limit}, msg: {s.Message}")
);
}


🔥 Правьте appsettings.json — консоль сразу выводит новые значения: без перезапуска, без таймеров, полностью нативно.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤4👍3