Task.FromResult应用场景举例

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

场景一:以同步的方式实现一个异步接口方法

比如有一个接口包含异步方法。

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)。

时间: 2024-10-07 08:13:59

Task.FromResult应用场景举例的相关文章

c#—— Task.FromResult 的使用

Task.FromResult用来创建一个带返回值的.已完成的Task. 场景一:以同步的方式实现一个异步接口方法 比如有一个接口包含异步方法. interface IMyInterface { Task<int> DoSthAsync(); } 现在,需要以同步的方式实现该接口方法DoSthAsync,但要返回异步的结果.这正是Task.FromResult的用武之地. public class MyClass : IMyInterface { public Task<int>

【设计模式】单例模式的理解与场景举例

软件设计常用的一种设计模式 -- 单例模式 体现:在应用这个模式时,单例对象的类必须保证只有一个实例存在. 好处:许多时候整个系统只需要拥有一个全局的对象,这样有利于我们协调整个系统的行为. 场景举例 1.服务器的配置信息放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象读取配置信息,这样也简化了复杂环境下的配置管理. 2.windows的task manager(任务管理器)就是单例的,我们并不能同时打开两个. 3.多线程的线程池一般也是单例模式的,

awk 场景举例

以下面的示例日志为例: 202.189.63.115 - - [31/Aug/2012:15:42:31 +0800] "GET / HTTP/1.1" 200 1365 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1" $0 就是整个记录行 $1 就是访问 IP " 202.189.63.115" $4 就是请求时

转Android APP安装后不在桌面显示图标的应用场景举例和实现方法

转http://www.cnblogs.com/allenzheng/p/4510725.html#3186608 Android APP安装后不在桌面显示图标的应用场景举例和实现方法 最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如升窗降窗.保养归零.读TPMS数据流等.公司的想法是把这些专车专用的诊断当成一种付费服务提供给用户,即用户在免费使

c# Task.FromResult 的基本用法和实例

c#  Task.FromResult 的基本用法和实例 This method is useful when you perform an asynchronous operation that returns a Task object, and the result of that Task object is already computed There are two common use cases I've found: When you're implementing an in

如何使用Task.FromResult?

Task.FromResult 字数:889字 预计阅读时间:3分钟 1.解释 官方定义:创建一个结果的.成功完成的Task<TResult>. public static System.Threading.Tasks.Task<TResult> FromResult<TResult> (TResult result); 可以看出,Task.FromResult( )方法接受一个TResult然后返回一个Task<TResult>. 2.例子 使用 Task

Android APP安装后不在桌面显示图标的应用场景举例和实现方法

最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如升窗降窗.保养归零.读TPMS数据流等.公司的想法是把这些专车专用的诊断当成一种付费服务提供给用户,即用户在免费使用基于OBD协议实现的诊断功能外,若想使用专车专用协议实现的某个特殊功能则需要按每个功能多少钱的形式付费(本人不太赞成靠这种方式赚钱,觉得还是免费的好). 我主要负责这款车联网产品中An

Task 6.3 场景调研

1.背景: (1)典型用户:信息1303班王银凤 (2)用户的需求/迫切需要解决的问题:她们宿舍上网一直使用的是外网,一年400的一种“套餐”.这种是按小时计算的,在校的时间平均下来一天可以用7 . 8个小时的WiFi,所以对于周末来说如果一直呆在宿舍的话网会不够用,因此她们会时长断掉网一段时间.这时需要一款软件可以解决她们彼此的通信问题,因为在大学里主要还是一直要跟一个宿舍的小伙伴一起,需要时刻保持联系. (3)假设:这时她们宿舍小伙伴如果都用上我们设计的软件了,她们可以在局域网内免流量地向好

Redis 11种Web应用场景举例

在"怎样让redis在你的系统中发挥作用"一文中,salvatore 'antirez' sanfilippo告诉我们如何利用redis独有的数据结构处理能力来解决一些常见问题.一些redis原语命令比如lpush.ltrim和lrem等等能够用来帮助开发者完成需要的任务--这些任务在传统的数据库存储中非常困难或缓慢.这是一篇非常有用并且实际的文章.那么要如何在你的框架中完成这些任务呢? 下面列出11种web应用场景,在这些场景下可以充分的利用redis的特性,大大提高效率. 1.在主