我有一个依赖于小接口的类,其方法由于速度慢而异步。请查看以下代码:
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方法单元?
答案 0 :(得分:3)
您无法将string
分配给int
,但无法将Task<double>
分配给double
。
Task<T>
表示异步操作,而不是结果本身。要获得结果,您可以await
结果如下:
Amount = await _fooService.GetFooAmount(_fooId);
或者,您可以通过Result
属性获取结果同步:
Amount = _fooService.GetFooAmount(_fooId).Result;