Soru .NET 4.6'nın Task.CompletedTask noktası nedir?


Bu blog yazısı yeni dahil olmak üzere yeni Görev API'lerinden bahseder Task.CompletedTask .NET 4.6'da tanıtılan özellik.

Bu neden eklendi? Bu nasıl daha iyi, diyelim ki, Task.FromResult(whatever)?


21
2018-05-27 20:59


Menşei


Daha açık bir niyet yok mu? - svick
Bunun nedeni, sabit durumdaki statik değişmez görevler oluşturarak belleği ayırabilmenizdir. Tamamlanmış bir görevi iade etmeniz gerekirse, ör. Sadece opsiyonel olarak internetten bir şeyler indirirsiniz ve aksi takdirde görevini tamamlayan arayanın hemen devam edebilmesi için tamamlanmış bir kukla görev döndürürsünüz. Şimdiye kadar kendi örneğinizi yaratmanız ve onu önbelleğe almanız ya da TaskCompletionSource ile her defasında yeniden oluşturmanız gerekiyordu. - Alois Kraus
Blog yazısı zaten nedenini açıklıyor Task.CompletedTask eklendi ... Özellikle "performansa önem veren ve tahsisleri önleyen kütüphane kodundan" bahseder. Şimdi bunu seninle karşılaştır Task.FromResult(whatever): Bu tahsisleri önler mi? Hayır değil. - hvd


Cevaplar:


Task.FromResult(whatever) için çalışıyor Task<TResult>ama 4.6'ya kadar nongenerik görev için hiçbir şey yoktu. Kullanabilirsin FromResult kukla bir değerle ve dolaylı olarak Taskama bu niyetini biraz şaşırtıyor (gerçekten asenkronize edilmiyorsun) değer) ve altındaki nesneleri tahsis eder ( CompletedTask tüm arayanlar arasında önbelleğe alınabilir ve paylaşılabilir).

Geçerli (4.5.2 ve üstü) kodlarda özel statik tamamlanmış görevleri görmek yaygın değildir, bu yüzden bence, çerçevenin kendisine dahil edilmesi mantıklıdır.


29
2018-05-27 21:16