csharp7 csharp dotnet visualstudio dayton csharpcode csharpcoder coding microsoft programmer developer csharpprogramming csharpversions daytimecoder debug design gdidayton girldevelopit github githubpages pluralsight programming programmingincsharp scottallen softwareengineer womenintech womenwhocode csharpdeveloper csestonia
If you call async 100 times/sec, then in the heap there will grow 6000 tasks for a minute, which need to be cleared by GC, it's time.
But often we check a cache in async method, and only then call some heavy await. ValueTask will help here - it's a structure = stored in a stack = not interesting for GC. ValueTask has two constructors: one to return a simple value (from a cache), the value is placed directly into the structure, the other is to return a task, the ValueTask is only a pointer to it.
Therefore, if we call async, which returns a ValueTask, and in 80% of cases returns a value from a cache, then in these 80% of cases we will NOT allocate a new memory to the heap.
Why not use ValueTask everywhere? Because structure => likes to be copied => CPU problem and stack overflow.
ValueTask became possible due to the fact that in C# 7 requirements for async methods were relaxed - now type of result must contain the GetAwaiter method. ValueTask contains it.
Если вы 100 раз/сек зовете async, то в куче за минуту нарастёт 6000 тасок, которых GC потом вычищать, а это время.
Но часто в async-методе идет проверка кэша, а лишь затем некий тяжелый await. Тут поможет ValueTask - он является структурой = хранится в стэке = не интересен для GC. У ValueTask два конструктора: один для возврата простого значения (из кэша), значение помещается прямо в структуру, другой - для возврата таски, в ValueTask лежит лишь указатель на нее.
Поэтому, если мы зовем async, возвращающий ValueTask, и в 80% случаев возвращающий значение из кэша, то мы в этих 80% случаев НЕ аллоцируем новую память в куче.
Почему не использовать ValueTask везде? Потому что структура => любит копироваться => проблема ЦП и Stack Overflow.
ValueTask стал возможен благодаря тому, что в C# 7 ослабили требования к async-методам - теперь тип результата должен содержать метод GetAwaiter. ValueTask именно его и содержит.
#valuetask #task #heap #stack #class #structure #async #await #csharp7 #csharp #programmer #programming
1$ Astonishing Offer - How to master C# - Join now! After attending the Microsoft MVP Summit, I am so inspired and excited about the future of C# and .NET that I want to give everyone a Productive C# Membership and access to the C# mastermind group. This incredible offer expires at the end of the week. Try it now! Link in Bio. https://aang.uk/2FpQDDk #csharp #dotnet #microsoft #productivecsharp #csharp7
@Regrann from @programmingincsharp - C# 7.1 adds support for async Main
#csharp #dotnet #visualstudio #programming #code #dotnetcrunch #dotnetframework #microsoft #csharpecorner #csharpcorner #csharpprogramming #developers #programmers #codetosuccess #codetoliveby #instaprogramming #instacoding #codeblogger #csharp7 #softwaredeveloper #dotnetconf #dotnetcurry #codepost #async #csharplystudio
sounds like a fun night.
.
.
.
.
.
#csharpcode #womenwhocode #wwc #womenInTech #csharpcoder #daytimeCoder #daytimeCode #programmingincSharp #dayton #codingInDayton #girlDevelopIt #gdi #gdiDayton #visualStudio#github #git #development #programmer #design #coding #dayton #softwareEngineer #debug #githubPages #pluralsight #scottallen #csharpversions #csharp7.0