国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Task.FromResult應用場景舉例

2019-11-14 14:10:56
字體:
來源:轉載
供稿:網友

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静海县| 河南省| 天镇县| 岫岩| 基隆市| 黔西县| 广宗县| 诸城市| 孝昌县| 达日县| 阿图什市| 凤凰县| 枣庄市| 宜阳县| 苍溪县| 苏尼特右旗| 建湖县| 固阳县| 贵德县| 弋阳县| 马边| 浦县| 汉川市| 称多县| 永和县| 浮梁县| 韶关市| 上栗县| 江山市| 辛集市| 元阳县| 锦屏县| 徐州市| 岑溪市| 津南区| 武平县| 河池市| 璧山县| 沾益县| 蒲江县| 许昌县|