UfcppSample
                                
                                 UfcppSample copied to clipboard
                                
                                    UfcppSample copied to clipboard
                            
                            
                            
                        IValueTaskSource
https://github.com/ufcpp/UfcppSample/issues/254 から独立した issue にしておいた方がよさそう。
- パフォーマンス改善を意図してValueTaskが導入されて、C# 7.0でTask-likeが認められた
- 用途ごとに Task-likeを1個1個作るのはしんどい
- ValueTaskの仕組みに乗っかりたい
- なので、ValueTaskがIValueTaskSourceを受け付けるようにして、このインターフェイスさえ実装すればいいようにした
- ただ、IValueTaskSourceを実装するにあたっては、ほとんどの場合、共通かつ煩雑なパターンが出てくる
- その煩雑な部分を構造体にまとめたのがManualResetValueTaskSourceCore
- TaskCompletionSourceよりパフォーマンス重視- キャッシュ・再利用可能
- await前提で、continuation が1個だけという想定の最適化をしてる
 
「雑記」で1ページ独立させて、非同期イテレーターとかからはリンクだけする。
https://devblogs.microsoft.com/dotnet/async-valuetask-pooling-in-net-5/ これも。 ValueTask 戻り値の非同期メソッドでは、async state machine の box インスタンスも pooling するようにしたいという話。 .NET 5 Preview 1 で、環境変数設定すると機能が有効化される。 デフォルトでオンになるかどうかは未定。