C#中的Task.CompletedTask和Task.Result学习

在学习C#中的Task方法时,可以知道Task启动一个异步线程方法可以用Task.Run()进行,具体可以参看博客 https://www.cnblogs.com/yaosj/p/10342883.html 和 https://www.cnblogs.com/wynblogscc/p/15138423.html

但是,在有些返回类型是Task的方法中,可以在不进行异步的情况下计算结果. 比如 一个简短的计算函数,或者测试中返回一个预先计算的结果。 像这种就不需要使用Task.Run,也就是说不需要异步执行.

但是它返回的又是Task类型,那应该怎么做到呢? 是这样的:

对于返回是Task类型的  => 我们可以返回 Task.CompletedTask

对于返回是Task<T>类型的  => 我们可以用Task.FromResult()来进行,比如返回的是Task<string>类型,我们可以类似这样返回Task.FromResult("this is result");

我们来看具体的2个例子:

1. 返回Task类型

public Task Do()
{
     //逻辑代码
     
     Task.CompletedTask;

}

2. 返回Task<T>类型

public Task<string> DoString()
{
      //逻辑代码
     
      return TasK.FromResult("This is test result");
}

这2种方式,由于方法时间很短,并不需要异步执行。可以避免用Task.Run()启动异步线程导致的系统开销

 

posted on 2023-05-19 10:24  新西兰程序员  阅读(960)  评论(0编辑  收藏  举报