UfcppSample icon indicating copy to clipboard operation
UfcppSample copied to clipboard

IValueTaskSource

Open ufcpp opened this issue 6 years ago • 1 comments

https://github.com/ufcpp/UfcppSample/issues/254 から独立した issue にしておいた方がよさそう。

  • パフォーマンス改善を意図してValueTaskが導入されて、C# 7.0でTask-likeが認められた
  • 用途ごとに Task-like を1個1個作るのはしんどい
  • ValueTask の仕組みに乗っかりたい
  • なので、ValueTaskIValueTaskSourceを受け付けるようにして、このインターフェイスさえ実装すればいいようにした
  • ただ、IValueTaskSource を実装するにあたっては、ほとんどの場合、共通かつ煩雑なパターンが出てくる
  • その煩雑な部分を構造体にまとめたのがManualResetValueTaskSourceCore
  • TaskCompletionSourceよりパフォーマンス重視
    • キャッシュ・再利用可能
    • await前提で、continuation が1個だけという想定の最適化をしてる

「雑記」で1ページ独立させて、非同期イテレーターとかからはリンクだけする。

ufcpp avatar Jul 15 '19 09:07 ufcpp

https://devblogs.microsoft.com/dotnet/async-valuetask-pooling-in-net-5/ これも。 ValueTask 戻り値の非同期メソッドでは、async state machine の box インスタンスも pooling するようにしたいという話。 .NET 5 Preview 1 で、環境変数設定すると機能が有効化される。 デフォルトでオンになるかどうかは未定。

ufcpp avatar Mar 17 '20 03:03 ufcpp