c#—— Task.FromResult 的使用
2015-10-28 20:20
369 查看
Task.FromResult用来创建一个带返回值的、已完成的Task。
场景一:以同步的方式实现一个异步接口方法
比如有一个接口包含异步方法。
现在,需要以同步的方式实现该接口方法DoSthAsync,但要返回异步的结果。这正是Task.FromResult的用武之地。
以上,在实现类MyClass的DoSthAsync方法中,都是以同步方式实现,但返回结果要是Task<int>,使用Task.FromResult刚好能返回一个带值的异步结果。
场景二:从缓存中获取值,以同步或者异步的方式实现
假设需要根据key从缓存中获取值,如果每个key对应的缓存不存在,就需要以异步的方式获取缓存,如果存在,就直接中缓存中获取值。
写一个异步获取缓存的方法。
现在需要写一个方法用来获取缓存中的值,有可能是异步方式,也有可能是同步的方式(从本地缓存中获取)。
以上,从本地缓存中获取值是同步的方式,但方法返回的类型是异步的Task,通过Task.FromResult(result)返回了异步结果。
另外,如果使用Task.FromResult不带返回值,就使用Task.FromResult(0) 或 Task.FromResult(null)。
场景一:以同步的方式实现一个异步接口方法
比如有一个接口包含异步方法。
interface IMyInterface
{
Task<int> DoSthAsync();
}
现在,需要以同步的方式实现该接口方法DoSthAsync,但要返回异步的结果。这正是Task.FromResult的用武之地。
public class MyClass : IMyInterface
{
public Task<int> DoSthAsync()
{
int result = 1;
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)。
相关文章推荐
- C# ManualResetEvent和AutoResetEvent 使用笔记
- C#操作剪贴板实现复制粘贴
- c# 5.0——async 和 await
- C#学习之委托
- C#语言基础
- C#串口通讯(变参、委托、线程安全队列)
- C#泛型与委托
- C# 类中索引器的使用二
- C#索引器一
- C# ArcEngine 实现点击要素高亮并弹出其属性
- C#中的装箱(Boxing)和拆箱(Unboxing)
- C#解决动态添加控件时,控件闪烁的问题
- C#解析Cookie字符串为CookieCollection
- c#下实现ping操作【转】
- c# 通过快捷方式读取目标路径
- C# ping操作,MSDN版(不是socket自己写值的版本)
- C#的MD5
- C#窗体透明
- [C#] 调用有管理员权限的CMD
- C# winform 弹出输入框