程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Task.FromResult應用場景舉例,task.fromresult

Task.FromResult應用場景舉例,task.fromresult

編輯:C#入門知識

Task.FromResult應用場景舉例,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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved