C# Task.FromResult的用法
阿新 • • 發佈:2021-11-19
https://www.cnblogs.com/stilldream/p/10184778.html
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)。
轉https://www.cnblogs.com/stilldream/p/10184778.html