ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ C# | Π²ΠΎΠΏΡΠΎΡΡ Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ
Open in Telegram
ΠΠΎΠΏΡΠΎΡΡ Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎ C# ΠΈ ΠΎΡΠ²Π΅ΡΡ Π½Π° Π½ΠΈΡ . ΠΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠ΅: @tproger_sales_bot Π£ΡΠΈΡΡΡΡ Ρ Π½Π°Ρ: https://clc.to/QRJIVw ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ: @proglibrary_feeedback_bot ΠΠ°ΡΠΈ ΠΊΠ°Π½Π°Π»Ρ: https://t.me/proglibrary/9197
Show more5 630
Subscribers
-624 hours
-47 days
-1830 days
Posts Archive
ΠΠΎΡΠ΅ΠΌΡ Span<T>/ReadOnlySpan<T> β ΡΡΠΎ ref struct, ΡΡΠΎ ΡΡΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ (heap/async/ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ/Π»ΡΠΌΠ±Π΄Ρ), ΠΈ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ βΡΡΠ΅Π·Ρβ ΡΠ΅ΡΠ΅Π· async-Π³ΡΠ°Π½ΠΈΡΡ?
ref struct β ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΠΊ: Π½Π΅Π»ΡΠ·Ρ Π±ΠΎΠΊΡΠΈΡΡ, Ρ
ΡΠ°Π½ΠΈΡΡ Π² ΠΏΠΎΠ»ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ², Π·Π°Ρ
Π²Π°ΡΡΠ²Π°ΡΡ Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² async/ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°Ρ
β ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΆΠΈΠ²ΡΡ Π² ΠΊΡΡΠ΅, ΡΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π»Ρ byref-ΡΠΈΠΏΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Span<T> Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ; ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· stackalloc, ΡΠ»Π°ΠΉΡΠΈΠ½Π³ O(1).
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· async/Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΠ΅Π³ΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π±Π΅ΡΠΈΡΠ΅ Memory<T>/ReadOnlyMemory<T>; ΠΏΠΎ ΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΠΉΡΠ΅ .Span.
ΠΠ΅Π»ΡΠ·Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ/ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Task<Span<T>>; Π½ΡΠΆΠ½ΠΎ Task<Memory<T>>.
πΈΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Ρ Π² C#.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
π ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
π Π‘ΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
π ΠΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»ΠΎΠ²Π°Ρ
ref ΠΈ out?
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ref ΠΈ out Π² C# Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ref ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π² ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ out Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π² ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ?
Π‘ΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ?
ΠΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ° β ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΉ ΠΊ ΡΡΠΈΠΌΠΌΠΈΠ½Π³Ρ ΠΈ AOT (NativeAOT/Blazor WASM)?
ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π½Π΅ΡΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ/Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ; Π΄Π»Ρ JSON ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ source-generators (JsonSerializerContext), Π΄Π»Ρ DI β compile-time ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΈΠ»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π±Π΅Π· ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠΌΠ΅ΡΠ°ΠΉΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ»Π΅Π½Ρ DynamicallyAccessedMembers/DynamicDependency, Π΄Π΅ΡΠΆΠΈΡΠ΅ TrimmerRootDescriptor/link.xml ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ. ΠΠ΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ Assembly.GetTypes() Π±Π΅Π· ΡΠΈΠ»ΡΡΡΠΎΠ²; ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ PublishTrimmed ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ Π·Π°ΡΠΈΡΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ API ΠΎΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ Π² .NET 7+ Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ throttling?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ System.Threading.RateLimiting (Token/Fixed/Sliding/ConcurrencyLimiter) ΠΈ middleware UseRateLimiter. ΠΠ»Ρ per-user/per-key β ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ Ρ partitioner; Π·Π°Π΄Π°ΠΉΡΠ΅ QueueProcessingOrder ΠΈ Π΄Π»ΠΈΠ½Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ backpressure ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΠΎΡΠΊΠ°Π·Ρ. ΠΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Polly-ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ (timeouts/ΡΠ΅ΡΡΠ°ΠΈ Ρ Π΄ΠΆΠΈΡΡΠ΅ΡΠΎΠΌ).
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ°ΡΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ Π±Π΅Π· Π±Π°Π³ΠΎΠ²?
Π₯ΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΡ Π² UTC, Π½Π°ΡΡΠΆΡ ΠΎΡΠ΄Π°Π²Π°ΠΉΡΠ΅ DateTimeOffset. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ DateTime.Now ΠΈ Kind=Unspecified; Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ Stopwatch. ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· TimeZoneInfo (Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ DST), Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΠ°ΡΠΎΠ² (ISystemClock), Π²ΡΠ΅ΠΌΡ ΠΏΠ°ΡΡΠΈΡΠ΅/ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠΉΡΠ΅ Π² ISO-8601. Π’Π΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ ΡΠ°ΡΠΎΠ²ΡΡ
ΠΏΠΎΡΡΠΎΠ² ΠΈ Β«Π΄ΡΡΠΊΠΈΒ» DST.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ API Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ Ρ Span<T>/ReadOnlySpan<T>?
ΠΡΠΈΠ½ΠΈΠΌΠ°ΠΉΡΠ΅ Π²Ρ
ΠΎΠ΄ ΠΊΠ°ΠΊ ReadOnlySpan<T>/Span<T>, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ReadOnlyMemory<T>/Memory<T> Π΄Π»Ρ async-Π³ΡΠ°Π½ΠΈΡ, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ Span Π²Π½Π΅ ΡΡΠ΅ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ref readonly/scoped Π³Π΄Π΅ ΡΠΌΠ΅ΡΡΠ½ΠΎ, Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΈΡΠ½ΠΈΡ
ΡΡΡΠΎΠΊ/ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ»Ρ Π±ΡΡΠ΅ΡΠΎΠ² ΠΈ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΡΠΈΠ½Π³/Π·Π°ΠΏΠΈΡΡ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
π± ΠΡΠ»ΠΈ Π²Π°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡ Π½Π΅ ΡΠΌΠ΅Π΅Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ AI-Π°Π³Π΅Π½ΡΡ, ΡΠΎ Π²Π°Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
Π‘ΠΊΡΠΈΠΏΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠ»ΠΈΠΊΠ°ΡΡ ΠΏΠΎ ΠΊΡΠ°ΡΠΈΠ²ΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΎΠ½ ΡΠΉΠ΄ΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΡ Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ API. ΠΠ΅ΡΠ΅ΡΡΡΠΎΠΈΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ΄ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² β ΡΡΠΎ ΡΠΆΠ΅ Π½Π΅ Ρ
Π°ΠΉΠΏ, Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
ΠΠ°ΠΊ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈ Π½Π΅ ΠΈΡΡΠ΅Π·Π½ΡΡΡ ΠΈΠ· Π²ΡΠ΄Π°ΡΠΈ:
β ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ
MCP ΠΈ A2A-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π°Π³Π΅Π½ΡΡ ΠΌΠΎΠ³Π»ΠΈ Π²Π°Ρ ΡΠΈΡΠ°ΡΡ;
β Π½Π°ΡΡΠΈΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΠΈΠΌΠΎΡΡΡ (Π»ΠΈΠΌΠΈΡΡ, ΠΊΡΡ, ΡΠΎΡΡΠΈΠ½Π³ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ);
β Π½Π°ΡΡΡΠΎΠΈΡΡ AgentOps: ΡΡΠ΅ΠΉΡΠΈΠ½Π³, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»ΠΎΠ² ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΉ.
ΠΡΡ ΡΡΠΎ ΠΆΠ΄ΡΡ Π²Π°Ρ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΠΎΠΌ ΠΊΡΡΡΠ΅ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° AI-Π°Π³Π΅Π½ΡΠΎΠ²Β». ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠΊΡΡ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΠΎΠΌ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³Π΅ ΠΈ production-ready ΡΠ΅ΡΠ΅Π½ΠΈΡΡ
.
ΠΡΡΠ°ΡΠΈ, Π΄ΠΎ 29 ΠΌΠ°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±ΡΠ°ΡΡ ΠΊΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΠΈΠ΄ΠΊΠΎΠΉ, ΠΈ ΡΡΠΎΠΈΡ ΠΏΠΎΡΠΎΡΠΎΠΏΠΈΡΡΡΡ β ΠΌΠ΅ΡΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠ΅ Π²ΡΡ ΠΌΠ΅Π½ΡΡΠ΅.
ΠΠ°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π½Ρ ΠΈ Π½Π°ΡΠ°ΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ Π°Π³Π΅Π½ΡΠΎΠ² Π±Π΅Π· ΡΠ»ΠΈΠ²Π° Π±ΡΠ΄ΠΆΠ΅ΡΠ° πΠΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ EF Core ΠΏΠΎΠ΄ Π²ΡΡΠΎΠΊΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΠΈ N+1?
ΠΠ»Ρ ΡΡΠ΅Π½ΠΈΡ β AsNoTracking ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΈ Select Π½Π° DTO, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΠΈΡΠΎΠΊΠΈΡ
Include; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ compiled queries ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·Π°ΡΠΈΡ, Π΄ΡΠΎΠ±ΠΈΡΠ΅ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎΡΡΡ AsSplitQuery, Π΄Π»Ρ ΠΌΠ°ΡΡΠΎΠ²ΡΡ
ΠΏΡΠ°Π²ΠΎΠΊ β ExecuteUpdate/Delete ΠΈΠ»ΠΈ bulk-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ; ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ SaveChanges, Π΄Π΅ΡΠΆΠΈΡΠ΅ DbContext ΠΊΡΠ°ΡΠΊΠΎΠΆΠΈΠ²ΡΡΠΈΠΌ (ΡΠΊΠΎΡΠΏ) ΠΈ ΡΠ»Π΅Π΄ΠΈΡΠ΅ Π·Π° N+1 ΡΠ΅ΡΠ΅Π· Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
Π ASP.NET Core Ρ Π²Π°Ρ ΠΊΡΡ Π½Π°Π΄ ΠΠ. ΠΠΎΠ³Π΄Π° TTL ΠΈΡΡΠ΅ΠΊΠ°Π΅Ρ, ΡΠΎΡΠ½ΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ±ΠΈΠ²Π°ΡΡ ΠΊΡΡ ΠΈ ΡΡΡΡΠΌΡΡΡ ΠΠ (cache stampede). ΠΠ°ΠΊ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Β«ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ» per-key Π±Π΅Π· Π΄Π΅Π΄Π»ΠΎΠΊΠΎΠ² ΠΈ ΡΡΠ΅ΡΠ΅ΠΊ, ΡΡΠΈΡΡΠ²Π°Ρ ΠΎΡΠΌΠ΅Π½Ρ/ΡΠ°ΠΉΠΌΠ°ΡΡΡ?
Π‘Π΄Π΅Π»Π°ΡΡ single-flight per key: ConcurrentDictionary<TKey, Lazy<Task<T>>> (ΠΈΠ»ΠΈ AsyncLazy) + GetOrAdd. ΠΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ await ΡΠΎΠΉ ΠΆΠ΅ Task. ΠΠ°ΠΆΠ½ΠΎ: Π½Π° ΠΎΡΠΈΠ±ΠΊΠ΅/ΠΎΡΠΌΠ΅Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ ΠΊΠ»ΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ failed-task; ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°ΡΡ CancellationToken; ΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΈ stale-while-revalidate Π΄Π»Ρ ΠΌΡΠ³ΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. ΠΠ»Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π³ΠΎΡΡΡΠΈΡ
ΠΊΠ»ΡΡΠ΅ΠΉ β ΠΏΠ΅Ρ-key SemaphoreSlim ΠΈΠ»ΠΈ Channel; ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ Π² IMemoryCache Ρ policy (TTL, size, eviction).
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΡΠ°ΡΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π²Ρ Π»ΠΎΠ²ΠΊΠΎ Π΄ΡΡΠ³Π°Π΅ΡΠ΅ ΡΡΡΠΊΠΈ API ΡΠ΅ΡΠ΅Π· Π±Π°Π·ΠΎΠ²ΡΠΉ
LangChain.
ΠΠ²ΡΡΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΠ»Π°Π½, Π΄Π°? ΠΠ΅Ρ, ΡΡΠΎ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡΠΉ ΠΎΡΠΊΠ°Π·.
Π ΡΠ²Π΅ΠΆΠ΅ΠΌ ΠΎΡΡΡΡΠ΅ ΠΏΠΎ ΡΡΠ½ΠΊΡ GPU Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ 54% ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΡΡΠΎΠΏΠ°ΡΡ ΠΠ-Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΡΠΏΠΎ ΠΈΠ·-Π·Π° ΠΊΠΎΠ½ΡΠΊΠΈΡ
Π·Π°ΡΡΠ°Ρ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
Π±ΠΎΠ»Π΅Π΅ 70% ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ β ΡΡΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π½Π° ΡΠΎΠ±Π΅ΡΠ°Ρ
ΡΠ΅ΠΉΡΠ°Ρ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π½Π΅ ΠΏΡΠΎ ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠΌΠΏΡΡ, Π° ΠΏΡΠΎ ΠΆΡΡΡΠΊΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΡ Π°Π³Π΅Π½ΡΠΎΠ².
ΠΠΎ ΡΡΡΠΈ, ΠΎΡ Π²Π°Ρ ΠΆΠ΄ΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΊΠ°ΠΊ Π»ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° Π»Π΅ΡΡ, ΡΠΎΡΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ Π΄Π΅Π±Π°ΠΆΠΈΡΡ ΠΎΡΠΊΠ°Π·Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ time-travel Π² LangGraph. ΠΡΠ»ΠΈ Π²Ρ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π±ΠΎΡΠΎΠ² Π² Π½ΠΎΡΡΠ±ΡΠΊΠ°Ρ
, Π³Π»ΡΠ½ΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΡΠΉ ΠΊΡΡΡ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΠ-Π°Π³Π΅Π½ΡΠΎΠ²Β» β ΡΠΎΠΊΡΡ ΡΠ°ΠΌ ΡΠΌΠ΅ΡΡΠ½ Ρ ΠΈΠ³ΡΡΡΠ΅ΡΠ½ΡΡ
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ Π½Π° ΡΡΡΠΎΠ²ΡΠΉ ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·.
Π§ΡΠΎ ΡΡΠ΅Π±ΡΡΡ ΠΎΡ ΠΌΠΈΠ΄Π»ΠΎΠ² ΠΈ Π²ΡΡΠ΅:
β ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΌΡΠ»ΡΡΠΈΠ°Π³Π΅Π½ΡΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ MCP;
β ΡΡΡΠΎΠ²ΡΠΉ AgentOps: ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΡΡΠ΅ΠΉΡΠΈΠ½Π³, Π·Π°ΡΠΈΡΠ° ΠΎΡ Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²;
β Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ Open Source ΠΏΠΎΠ΄ 152-Π€Π (Π±Π΅Π· ΡΡΠΎΠ³ΠΎ Π² ΡΠΈΠ½ΡΠ΅Ρ
ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΡΡΡΠ°ΡΡΡΡ).
ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ²Π°ΡΡ ΠΊΡΡΡ Ρ ΡΠ²Π΅ΡΠΈΡΡΠΎΠΉ ΡΠΊΠΈΠ΄ΠΊΠΎΠΉ (49 000 β½ 62 990 β½ Π·Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°ΡΠΈΡ ΠΈ 99 000 β½ 124 990 β½ Π·Π° ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΡΡΠ΅ΠΊ), Π½ΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΡΠΎΡΠΎΠΏΠΈΡΡΡΡ β Π½Π° ΠΏΠΎΡΠΎΠΊΠ΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ΅Π³ΠΎ 5 ΠΌΠ΅ΡΡ.
π ΠΠΎΠ΄ΡΡΠ½ΡΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠΎΠ΄Π°ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Singleton Π² C#?
Π ΡΠ°Π±Π»ΠΎΠ½Π΅ Singleton ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΌΡ.
Public sealed class Singleton
{
Private static readonly Singleton _instance = new Singleton();
}
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π°Π½Π½ΡΠ΅ JSON ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ .NET ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ JSON?
JSON (JavaScript Object Notation) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡ ΠΈ Ρ
ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² JSON ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ JSON-ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠ°ΠΉΡΠΎΠ² ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈΡ
Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΠΊΠ°Π½Π°Π»Ρ SML / RSS. Json.NET ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ .NET ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° JSON. Π’Π°ΠΊΠΆΠ΅ Json.NET ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠΎΡΠΌΠ°Ρ JSON. Json.NET ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ .NET2, .NET3 ΠΈ .NET4.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ΄Π΅ thread pool starvation ΠΈ Β«sync-over-asyncΒ» Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°?
Π‘Π½ΠΈΠΌΠ°ΠΉΡΠ΅ EventPipe-ΠΌΠ΅ΡΡΠΈΠΊΠΈ (dotnet-counters): ThreadPool Queue Length/Completed/Active, aspnetcore-ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ; Π±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ dotnet-trace CPU-ΡΡΠΌΠΏΠ»ΠΈΠ½Π³, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π°ΠΌΠΏ. ΠΡΠΈΠ·Π½Π°ΠΊΠΈ β Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΌΠ°Π»ΠΎ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ², Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΡΡΠ΅ΠΊΠΈ. ΠΠ΅ΡΠ΅Π½ΠΈΠ΅: end-to-end async, ΡΠ±ΡΠ°ΡΡ .Result/.Wait(), Π²ΡΠ½Π΅ΡΡΠΈ Π΄ΠΎΠ»Π³ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈ ΠΏΠΈΠΊΠ°Ρ
ΠΏΠΎΠ΄Π½ΡΡΡ MinThread, Π½ΠΎ Π½Π΅ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΡΠ΅Π½Ρ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠΎΠ³Π΄Π° Π²ΡΠ±ΠΈΡΠ°ΡΡ System.IO.Pipelines Π²ΠΌΠ΅ΡΡΠΎ Stream, ΠΈ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠΈΠ½Π³Π°?
ΠΠ»Ρ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ²/ΡΠΎΠΊΠ΅ΡΠΎΠ²: PipeReader Π²ΡΠ΄Π°ΡΡ ReadOnlySequence<byte> Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ, ΠΏΠ°ΡΡΠΈΡΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ, ΡΡΠΈΡΡΠ²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ backpressure ΡΠ΅ΡΠ΅Π· AdvanceTo(consumed, examined), Π½Π΅ ΡΡΠ΅Π±ΡΠΉΡΠ΅ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΠΉΡΠ΅ Complete() ΠΈ ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°ΠΉΡΠ΅ CancellationToken.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΆΠ΅ΡΡΡ, ΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ ΠΎΡ ΠΈΠ³ΡΡΡΠ΅ΠΊ ΠΊ ΡΡΡΠΎΠ²ΠΎΠΌΡ AgentOps
ΠΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π½Π° Π½Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΡΠΉ ΠΊΡΡΡ ΠΏΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ-Π°Π³Π΅Π½ΡΠΎΠ². ΠΠΈΠΊΠ°ΠΊΠΎΠΉ Π²ΠΎΠ΄Ρ ΠΏΡΠΎ Β«Π±ΡΠ΄ΡΡΠ΅Π΅ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠ΅ΠΉΒ», ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄.
ΠΠ° ΠΊΡΡΡΠ΅ ΠΌΡ:
β ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΡΡΡΠΎΠΈΠΌ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°
LangGraph, CrewAI ΠΈ MCP;
β Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΡΠΈΠ½Π³, ΡΡΠΎΠ±Ρ Π±ΠΎΡ Π½Π΅ ΡΠΎΠΆΡΠ°Π» ΡΠΎΠΊΠ΅Π½Ρ;
β ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠΎ ΡΡΠ΅ΠΉΡΠΎΠΌ, ΡΡΠΈΠΌΡΡ Π΄Π΅Π±Π°ΠΆΠΈΡΡ ΡΠ΅ΡΠ΅Π· time-travel ΠΈ ΠΏΡΠΈΠΊΡΡΡΠΈΠ²Π°Π΅ΠΌ human-in-the-loop;
β Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ RAG Π² ΠΏΡΠΎΠ΄ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΈΠΊΠΈ Π½Π΅ Π·Π°Π²Π΅ΡΠ½ΡΠ»ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈΠ·-Π·Π° 152-Π€Π.
Π ΠΏΠ΅ΠΊΠ»ΠΎ ΡΠΊΡΡΠ½ΡΠ΅ Π»Π΅ΠΊΡΠΈΠΈ ΠΏΡΠΎ ΠΎΠ±ΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ β ΡΡΠ°Π·Ρ ΡΠΎΠΊΡΡΠΈΡΡΠ΅ΠΌΡΡ Π½Π° Π°Π³Π΅Π½ΡΠ½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠΠ°Π½ΡΡΠΈΡ Π²Π΅Π΄ΡΡ Π±ΡΠ²Π°Π»ΡΠ΅ Π»ΠΈΠ΄Ρ ΠΈΠ· ΠΠ°Π·ΠΏΡΠΎΠΌΠ±Π°Π½ΠΊΠ° ΠΈ ΠΠ»ΡΡΡ, Π½Π°Π±ΠΈΠ²ΡΠΈΠ΅ ΡΠΈΡΠΊΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
.
ΠΡΡΠ°ΡΠΈ, Π½Π° Π΄Π½ΡΡ ΠΌΡ ΠΏΠΈΠ»ΠΈΠ»ΠΈ Π°Π³Π΅Π½ΡΠ° Π² ΠΏΡΡΠΌΠΎΠΌ ΡΡΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ β Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ Π²Π΅Π±ΠΈΠ½Π°ΡΠ°.Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±ΡΠ°ΡΡ ΠΊΡΡΡ ΠΏΠΎ ΡΡΠ°ΡΡΠΌ ΡΠ΅Π½Π°ΠΌ. ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠ°ΡΠΈΡ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎΠΈΡ 49 000 β½ (Π²ΠΌΠ΅ΡΡΠΎ 62 990 β½), ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΡΡΠ΅ΠΊ β 99 000 β½ (Π²ΠΌΠ΅ΡΡΠΎ 124 990 β½). ΠΡΠ»ΠΈ Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π²ΡΡ ΡΡΠΌΠΌΡ ΡΡΠ°Π·Ρ, Π΅ΡΡΡ ΡΠ°ΡΡΡΠΎΡΠΊΠ°. Π’ΠΎΡΠΎΠΏΠΈΡΠ΅ΡΡ β Π½Π° ΠΏΠΎΡΠΎΠΊΠ΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ΅Π³ΠΎ 5 ΠΌΠ΅ΡΡ! β ΠΠ°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ²ΠΎΠΈΡ Π°Π³Π΅Π½ΡΠΎΠ²
ΠΠ°ΠΊ ΡΡΡΠΈΠΌΠΈΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡ Π² ASP.NET Core Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΠΈ Ρ backpressure?
ΠΡΠ΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΎΠΊ ΡΠ΅ΡΠ΅Π· IAsyncEnumerable<T> ΠΈΠ»ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ Π² HttpResponse.BodyWriter/PipeWriter, ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ (System.Text.Json + Utf8JsonWriter), Π²Π΅Π·Π΄Π΅ ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°ΠΉΡΠ΅ CancellationToken, Π½Π΅ Π±ΡΡΠ΅ΡΠΈΠ·ΡΠΉΡΠ΅ Π²Π΅ΡΡ ΠΎΡΠ²Π΅Ρ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠΉΡΠ΅ FlushAsync.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
ΠΠ°ΠΊ ΡΡΡΡΠΎΠΈΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ JSON Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΉ?
Π Π΅ΡΠ·Π°ΠΉΡΠ΅ ΠΎΠ΄ΠΈΠ½ JsonSerializerOptions (ΠΊΠ΅ΡΠΈΡΡΠΉΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ System.Text.Json Ρ Utf8JsonWriter/IAsyncEnumerable<T> Π΄Π»Ρ ΡΡΡΠΈΠΌΠΈΠ½Π³Π°, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ
ΡΡΡΠΎΠΊ, Π²ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ source-generators (JsonSerializerContext) Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, Π±ΡΡΠ΅ΡΠΈΠ·ΡΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· ArrayPool<byte> ΠΈ ΠΏΠΈΡΠΈΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ Π² PipeWriter/BodyWriter.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ±Π΅ΡΠ° ΠΏΠΎ Π‘#
