[英]Will ValueTask still be beneficial if it depends on a method that returns Task?
以以下方法為例:
public async ValueTask<int> MyMethod() {
return await GetMyIntegerWithTask();
}
public async Task<int> GetMyIntegerWithTask() {
if (/*in hot path*/) {
return await SynchronousMethodThatUsesTask();
}
return await AsynchronousMethodThatUsesTask();
}
public Task<int> SynchronousMethodThatUsesTask() {
int value = new Random().Next();
return Task.FromResult(value);
}
public async Task<int> AsynchronousMethodThatUsesTask() {
//some asynchronous calculation
}
使用ValueTask
作為MyMethod
的返回類型是否仍然具有與ValueTask
相關的優勢,因為我希望大部分時間我的代碼將同步執行(即使我依賴的同步方法返回Task
而不是ValueTask
)?
使用 ValueTask 作為 MyMethod 的返回類型是否仍然具有與 ValueTask 相關的優勢,因為我希望大部分時間我的代碼將同步執行(即使我依賴的同步方法返回 Task 而不是 ValueTask)?
ValueTask
的性能優勢很小,除非您經常調用它。 也就是說,是的, ValueTask
至少會避免Task
分配,並且在同步情況下也避免將 state 機器結構裝箱到堆上。
如果GetMyIntegerWithTask
和SynchronousMethodThatUsesTask
也使用ValueTask<int>
會更好,但即使沒有, MyMethod
也可以使用ValueTask<int>
來避免一些分配,至少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.