调用接口的异步方法

本文关键字:异步方法 接口 调用 | 更新日期: 2023-09-27 18:16:08

我有一个类,它依赖于一个小的接口,这个接口的方法是异步的,因为它很慢。请看下面的代码:

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);
        }
    }
}

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

不能隐式转换类型"System.Threading.Tasks"。任务'到'double'

我是否采用了错误的方法来使接口中的方法返回Task?如果没有,我该如何解决错误信息?更新:我也想知道我怎么能有refremount方法单元测试现在?

调用接口的异步方法

就像您不能将string分配给int一样,您也不能将Task<double>分配给double

Task<T>表示异步操作,而不是结果本身。要获得结果,您可以像这样对结果进行await:

Amount = await _fooService.GetFooAmount(_fooId);

可选地,您可以通过Result属性同步获取结果:

Amount = _fooService.GetFooAmount(_fooId).Result;