调用接口的异步方法

时间:2014-08-02 07:09:55

标签: c# unit-testing asynchronous

我有一个依赖于小接口的类,其方法由于速度慢而异步。请查看以下代码:

using System.Threading.Tasks;

namespace eFoo
{
    public interface IFooService
    {
        Task<double> GetFooAmount(int fooId);
    }

    public class FooInfo
    {
        private readonly int _fooId;
        private readonly IFooService _fooService;
        public FooInfo(int fooId, IFooService fooService)
        {
            _fooId = fooId;
            _fooService = fooService;
        }
        public double Amount { get; private set; }
        public async Task RefreshAmount()
        {
            Amount = _fooService.GetFooAmount(_fooId);
            await Task.Delay(1000);
        }
    }
}

现在我遇到了公共异步任务RefreshAmount()的问题 收到以下编译错误:

无法将类型'System.Threading.Tasks.Task'隐式转换为'double'

我是否采用了错误的方法使接口中的方法返回Task?如果没有,我该如何解决错误信息? 更新: 另外我想知道如何才能测试RefreshAmount方法单元?

1 个答案:

答案 0 :(得分:3)

您无法将string分配给int,但无法将Task<double>分配给double

Task<T>表示异步操作,而不是结果本身。要获得结果,您可以await结果如下:

Amount = await _fooService.GetFooAmount(_fooId);

或者,您可以通过Result属性获取结果同步

Amount = _fooService.GetFooAmount(_fooId).Result;