Когда логика и физика живут в правильных циклах, управление остается быстрым, а движение не ломается из-за разного FPS.
В этом гайде:
• Разбираем, почему смешивать физику и ввод в одном методе опасно;
• Показываем рабочую схему с Update и FixedUpdate без конфликтов;
• Объясняем, когда использовать Time.deltaTime и Time.fixedDeltaTime.
Примени этот подход в проекте, и поведение персонажа станет предсказуемым на любом устройстве.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤝24❤10🔥9👍3
В этой статье:
• Показаны цели фреймворка и базовые архитектурные решения.
• Разобраны ключевые возможности первой беты для реальных приложений.
• Объясняется, почему экосистема Avalonia стала заметной в .NET-мире.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🤝4👍3
HttpClientFactory в ASP,NET Core: убираем таймауты и «умирающие» сокеты!
Частая проблема в сервисах такая: запросов становится больше, а внешнее API начинает отвечать дольше. В какой-то момент появляются случайные таймауты, хотя код «вроде простой».
Обычно это выглядит так:
Когда
В ASP.NET Core лучше один раз настроить клиент через
Сервис регистрируем отдельно, чтобы использовать настроенный клиент внутри бизнес-логики.
Теперь сам сервис. Через фабрику получаем именованный клиент и выполняем запрос.
Так соединения используются повторно, а поведение под нагрузкой становится заметно ровнее.
🔥 В итоге ты убираешь класс случайных сетевых сбоев и получаешь более предсказуемый прод.
➡️ C# Ready| #практика
Частая проблема в сервисах такая: запросов становится больше, а внешнее API начинает отвечать дольше. В какой-то момент появляются случайные таймауты, хотя код «вроде простой».
Обычно это выглядит так:
public async Task<string> LoadOrdersAsync(string url)
{
using var client = new HttpClient();
return await client.GetStringAsync(url);
}
Когда
HttpClient создаётся на каждый вызов, соединения не переиспользуются нормально. Под нагрузкой это бьёт по стабильности.В ASP.NET Core лучше один раз настроить клиент через
IHttpClientFactory и брать его из DI.using System.Net.Http;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient("orders", client =>
{
client.BaseAddress = new Uri("https://api.example.com/");
client.Timeout = TimeSpan.FromSeconds(5);
});
Сервис регистрируем отдельно, чтобы использовать настроенный клиент внутри бизнес-логики.
builder.Services.AddScoped<OrderService>();
var app = builder.Build();
app.Run();
Теперь сам сервис. Через фабрику получаем именованный клиент и выполняем запрос.
public sealed class OrderService
{
private readonly IHttpClientFactory _factory;
public OrderService(IHttpClientFactory factory)
{
_factory = factory;
}
public async Task<string> LoadOrdersAsync()
{
var client = _factory.CreateClient("orders");
return await client.GetStringAsync("orders/today");
}
}
Так соединения используются повторно, а поведение под нагрузкой становится заметно ровнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥6👍5
This media is not supported in your browser
VIEW IN TELEGRAM
FlowchartAI — это бесплатный AI-генератор блок-схем, который из текста или кода автоматически строит диаграмму. Он анализирует твой ввод (описание процесса/алгоритма или код) и превращает его в визуальную блок-схему, которую можно смотреть прямо в браузере без регистрации.
📌 Оставляю ссылочку: flowchartai.org
➡️ C# Ready| #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9🤝7
Почему async void почти всегда проблема?
С
Из-за этого ошибки часто всплывают не там, где ты их ждешь. Еще хуже то, что завершение метода нельзя контролировать. Ты не можешь корректно дождаться его и встроить в общий поток выполнения.
🔥 Итог: в обычном коде используй
➡️ C# Ready | #совет
С
async Task вызывающий код может сделать await и нормально поймать исключение. С async void такого пути нет.Из-за этого ошибки часто всплывают не там, где ты их ждешь. Еще хуже то, что завершение метода нельзя контролировать. Ты не можешь корректно дождаться его и встроить в общий поток выполнения.
async void допустим в основном для обработчиков событий, где сигнатуру задает сам фреймворк.static async Task SaveAsync()
{
await Task.Delay(100);
}
await SaveAsync();
async Task или async Task<T>. async void оставляй только для событий.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍7🔥5👎1
HTTPS — это HTTP с защитой. Он шифрует данные между браузером и сервером, поэтому их сложно перехватить и прочитать.Сначала браузер проверяет сертификат сайта, чтобы убедиться, что сервер настоящий. Потом стороны договариваются о ключе. После этого весь обмен идёт через защищённый канал.
Сохрани, чтобы быстро вспоминать, что значит
https://Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤5👍3
В этой статье:
• Как устроить слои и батчи, чтобы сократить число draw call.
• Как использовать инстансинг для повторяющихся элементов персонажа.
• Как измерять прирост производительности после изменений.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🔥3
int.TryParse в C#: перестаём падать на пользовательском вводе!
Пользователь вводит число в поле, и всё работает до первого «abc» или пустой строки. После этого приложение ловит исключение и ты тратишь время на разбор банального кейса.
Часто пишут так:
Теперь программа не падает, а спокойно обрабатывает ошибку и продолжает работу.
🔥 В итоге ты убираешь лишние исключения и получаешь предсказуемое поведение на реальных данных.
➡️ C# Ready | #практика
Пользователь вводит число в поле, и всё работает до первого «abc» или пустой строки. После этого приложение ловит исключение и ты тратишь время на разбор банального кейса.
Часто пишут так:
Console.Write("Введите возраст: ");
string input = Console.ReadLine()!;
int age = int.Parse(input);
Console.WriteLine($"Возраст: {age}");int.Parse хорош, когда формат уже гарантирован. Для пользовательского ввода безопаснее использовать int.TryParse.Console.Write("Введите возраст: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"Возраст: {age}");
}
else
{
Console.WriteLine("Некорректный ввод. Введите целое число.");
}Теперь программа не падает, а спокойно обрабатывает ошибку и продолжает работу.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥8👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Внутри — обучение через материалы Microsoft Learn + проверки знаний на стороне freeCodeCamp: ты пройдёшь основы языка (переменные, типы данных, управляющие конструкции) и базовые принципы ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥6
🔥18❤6👍3
В этой статье:
• Какие пакеты реально экономят время в типовых задачах.
• Где пакет уместен в проде, а где лучше остаться на стандартном API.
• Как оценивать риски новой зависимости перед подключением.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥5👎2
Почему async void приводит к потерянным ошибкам?
Иногда хочется быстро сделать асинхронный метод и поставить
Поэтому баги всплывают позже и разбор занимает больше времени.
Вот как обычно выглядит такая ситуация:
Проблема в том, что при
Надёжнее вернуть
Теперь поведение предсказуемо. Ты сразу видишь точку ошибки и можешь обработать её в нужном месте.
🔥 В обычном коде используйте
➡️ C# Ready | #практика
Иногда хочется быстро сделать асинхронный метод и поставить
async void. Сначала всё выглядит нормально, но при ошибке вызывающий код уже не может корректно обработать исключение.Поэтому баги всплывают позже и разбор занимает больше времени.
Вот как обычно выглядит такая ситуация:
static async void ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}
ProcessOrderAsync(42);
Console.WriteLine("Дальше код идёт как будто всё хорошо");
Проблема в том, что при
async void вызывающий код не может дождаться завершения метода. По этой причине ошибка теряет контекст и в логах часто выглядит случайной.Надёжнее вернуть
Task и явно дождаться выполнения:static async Task ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}
try
{
await ProcessOrderAsync(42);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Теперь поведение предсказуемо. Ты сразу видишь точку ошибки и можешь обработать её в нужном месте.
async Task. async void оставляйте только для обработчиков событий.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🔥6