【问题标题】:How to return a task from synchronous code for a mock implementation如何从同步代码中返回任务以进行模拟实现
【发布时间】:2019-09-11 11:25:26
【问题描述】:

我对异步等待几乎没有经验。

我正在尝试为从数据库返回数据的服务创建一个模拟。

具体的服务类可能会比较慢,所以界面返回Task如下图:

public interface IReferenceDataService
    {
        Task<List<ReferenceDataResults>> GetReferenceData(string domain, string concept);
    }

我的模拟类如下所示:

public class MockReferenceDataService : IReferenceDataService
{
    public async Task<List<ReferenceDataResults>> GetReferenceData(string domain, string concept)
    {
        List<ReferenceDataResults> ret = new List<ReferenceDataResults>();

        var refDataRepo = new List<ReferenceDataResults>()
        {
            new ReferenceDataResults{ Domain = "Interfaces.Avaloq", Concept = "Client", Key1 = "CE", Value1 = "2", Key2 = "Avaloq", Value2 = "Individual" },
             new ReferenceDataResults{ Domain = "Interfaces.Avaloq", Concept = "Client", Key1 = "CE", Value1 = "3", Key2 = "Avaloq", Value2 = "Joint" } 

        };

        var found = refDataRepo.FindAll(x => x.Domain == domain && x.Concept == concept);

        foreach (var row in found)
        {
            ret.Add(new ReferenceDataResults() { Concept = row.Concept,
                Domain = row.Domain, Key1 = row.Key1, Key2 = row.Key2, Value1 = row.Value1, Value2 = row.Value2 });
        }

        return ret;
    }
}

这会给出编译器警告,因为它被标记为“异步”但缺少“等待”。 我猜最接近数据库检索的是 List 上的 FindAll 方法,但似乎没有我可以“等待”的 FindAll 的异步版本。

解决此问题的最佳方法是什么?

【问题讨论】:

  • 将return语句更改为return await Task.FromResult(ret);。您可以在here阅读有关Task.FromResult的详细信息
  • @user1672994 我建议丢失asyncawait,只使用return Task.FromResult(ret);

标签: c# async-await task-parallel-library


【解决方案1】:

由于async 不构成界面的一部分,请尝试将其删除:

public class MockReferenceDataService : IReferenceDataService
{
    public Task<List<ReferenceDataResults>> GetReferenceData(string domain, string concept)
    {
        // Your code
        return Task.FromResult(ret);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2015-08-29
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2013-03-22
    • 2019-10-12
    相关资源
    最近更新 更多