Task.FromResult用来创建一个带返回值的、已完成的Task。

场景一:以同步的方式实现一个异步接口方法
比如有一个接口包含异步方法。

interface IMyInterface
{
Task<int> DoSthAsync();
}

现在需要以同步的方式实现该接口方法DoSthAsync,但要返回异步的结果。这正是Task.FromResult的用武之地。

public class MyClass : IMyInterface
{
public Task<int> DoSthAsync()
{
int result = ;
return Task.FromResult(result);
}
}

以上,在实现类MyClass的DoSthAsync方法中,都是以同步方式实现,但返回结果要是Task<int>,使用Task.FromResult刚好能返回一个带值的异步结果。

场景二:从缓存中获取值,以同步或者异步的方式实现
假设需要根据key从缓存中获取值,如果每个key对应的缓存不存在,就需要以异步的方式获取缓存,如果存在,就直接中缓存中获取值。
写一个异步获取缓存的方法。

private async Task<string> GetValueAsync(int key)
{
string result = await SomeAsyncMethod();
cache.TrySetValye(key, result);
return result;
}

现在需要写一个方法用来获取缓存中的值,有可能是异步方式,也有可能是同步的方式(从本地缓存中获取)。

public Task<string> GetValueFromCache(int key)
{
string result = string.Empty;
if(cache.TryGetValue(key, out result))
{
return Task.FromResult(result);
}
return GetValueAsync(key);
}

以上,从本地缓存中获取值是同步的方式,但方法返回的类型是异步的Task,通过Task.FromResult(result)返回了异步结果。

另外,如果使用Task.FromResult不带返回值,就使用Task.FromResult(0) 或 Task.FromResult(null)。

最新文章

  1. 图解JVM字节码执行引擎之栈帧结构
  2. Vmware安装Centos NAT方式设置静态IP
  3. druid.properties的配置
  4. ios控制器生命周期详解
  5. 在LaTeX文档中插入图片的几种常用的方法
  6. POJ 1523 SPF tarjan求割点
  7. winform学习2-datagridview数据绑定
  8. 【pyQuery】抓取startup news首页
  9. virtualbox macosx10.9改变分辨率方法
  10. Yii CDbCriteria
  11. 猿取向的规划设计模式 ——GoF《设计模式》阅读摘要(零)
  12. SpringBoot入门教程(二十一)IntelliJ IDEA配置Quartz启动项
  13. angular学习笔记(三)
  14. bank_card.js
  15. ios &#160;调整 label 的字体行间距
  16. jdk 生成证书
  17. chrome.debugger
  18. Oracle记录-Linux JDK与Oracle profile环境配置
  19. java读取按行txt文件
  20. Opencv2教程一:图像变换之阈值二值threshold

热门文章

  1. Oracle执行SQL语句的过程
  2. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(下)
  3. 核心API的使用(获取两个字符串的最大相同子串)
  4. mysql 查询小技巧
  5. 架构师养成记--31.Redis的几种类型
  6. java内存的分配策略
  7. Mac拷贝/复制文件夹路径快捷键
  8. ASP.NET MVC利用ActionLink实现动态组合查询
  9. 【es6】js原生的promise
  10. linux下统计文本行数的各种方法(一)