簡體   English   中英

如果 ValueTask 依賴於返回 Task 的方法,它仍然是有益的嗎?

[英]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 機器結構裝箱到堆上。

如果GetMyIntegerWithTaskSynchronousMethodThatUsesTask也使用ValueTask<int>更好,但即使沒有, MyMethod也可以使用ValueTask<int>來避免一些分配,至少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM