Task.FromResult tekil döndürebilir
Task.FromResult<TResult>(TResult) artık her zaman yeni bir örnek oluşturmak yerine önbelleğe alınmış Task<TResult> bir örnek döndürebilir.
Eski davranış
Önceki sürümlerde, Task.FromResult<TResult>(TResult) türüne T
veya sonuç değerine bakılmaksızın her zaman yeni Task<TResult>bir ayırırdı.
Yeni davranış
Bazı T
türler ve bazı sonuç değerleri için, Task.FromResult<TResult>(TResult) yeni bir nesne ayırma yerine önbelleğe alınmış tekil bir nesne döndürebilir. Örneğin, her çağrısının Task.FromResult(true)
aynı zaten tamamlanmış Task<bool>
nesneyi döndürmesi olasıdır.
Sürüm kullanıma sunulmuştur
.NET 6
Hataya neden olan değişikliğin türü
Bu değişiklik ikili uyumluluğu etkileyebilir.
Değişiklik nedeni
Birçok geliştiricinin, bu tür bir önbelleğe alma işlemi gerçekleştiren zaman uyumsuz yöntemlere benzer şekilde davranması beklenir Task.FromResult<TResult>(TResult) . Ayırma davranışını bilen geliştiriciler genellikle bu yaygın olarak kullanılan değerler için her zaman ayırmanın performans maliyetini önlemek için kendi önbelleklerini korurdu. Örneğin:
private static readonly Task<bool> s_trueTask = Task.FromResult(true);
Artık ve gibi küçük Int32 değerler için bu tür Boolean özel önbellekler gerekli değildir.
Önerilen eylem
Bir örneğin başka bir Task
Task
örnekle aynı olup olmadığını denetlemek için başvuru eşitliği kullanmıyorsanız, bu değişiklik sizi etkilememelidir. Böyle bir başvuru eşitliği kullanıyorsanız ve bu denetime devam etmeniz gerekiyorsa, her zaman benzersiz Task<TResult> bir örneği geri almayı garanti etmek için aşağıdaki kodu kullanın:
private static Task<T> NewInstanceFromResult<T>(T result)
{
var tcs = new TaskCompletionSource<T>();
tcs.TrySetResult(result);
return tcs.Task;
}
Not
Bu desen yalnızca kullanmaktan Task.FromResult(result)
çok daha az verimlidir ve gerçekten ihtiyacınız olmadığı sürece bundan kaçınılmalıdır.
Etkilenen API’ler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin