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()启动异步线程导致的系统开销