-2

看看这段代码:

public async Task<int> GetResult(string param1)
{
    if(param1 == "abc")
       return _knownResult;
    else
       return await LongDatabaseCall();
}

鉴于这LogDatabaseCall将返回 a Task<int>,它可能被保存到_knownResult中,那么应该是什么类型_knownResult- Task<int>或者ValueTask<int>性能方面的

4

3 回答 3

1

这里的主要问题是关于分配和性能。

实际上,这几乎从来都不是主要问题。

在确定是否应该使用Task<T>orValueTask<T>时,主要问题是开发人员培训之一:如果您团队中的每个人都熟悉 的陷阱ValueTask<T>,那么我建议您这样做。但是,如果不是所有的编码人员都熟悉ValueTask<T>(现在在一般情况下似乎是这样),那么我建议使用Task<T>.

性能方面几乎总是无关紧要的。

于 2021-06-26T01:35:36.637 回答
0

如果您已经知道结果,则意味着没有 IO 调用或需要等待,但您的方法的其他部分需要等待。

为清楚起见,我假设您希望为第一个条件返回值 1。

// 1. If knownresult is type of Task<int> then   

   public async Task<int> GetResult(string param1)
   {
    if(param1 == "abc")
       return await knownResult;
    else
       return await LongDatabaseCall();
   }
  1. 如果 knownResult 是 int 则(不等待)

    public async Task<int> GetResult(string param1)
     {
         if(param1 == "abc")
            return knownResult;
         else
            return await LongDatabaseCall();
     }
    
于 2021-06-25T03:23:35.840 回答
-2

您可以使用Task.FromResult

return Task.FromResult(knownResult);
于 2021-06-26T01:39:17.020 回答