UfcppSample
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 で、環境変数設定すると機能が有効化される。 デフォルトでオンになるかどうかは未定。