调用接口的异步方法
本文关键字:异步方法 接口 调用 | 更新日期: 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;