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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM