C# 调用接口的异步方法
我有一个类,它依赖于一个小接口,它的方法是异步的,因为它很慢。请查看以下代码:C# 调用接口的异步方法,c#,unit-testing,asynchronous,C#,Unit Testing,Asynchronous,我有一个类,它依赖于一个小接口,它的方法是异步的,因为它很慢。请查看以下代码: using System.Threading.Tasks; namespace eFoo { public interface IFooService { Task<double> GetFooAmount(int fooId); } public class FooInfo { private readonly int _foo
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);
}
}
}
使用System.Threading.Tasks;
名称空间eFoo
{
公共接口iFoosService
{
任务GetFooAmount(intFooId);
}
公共类FooInfo
{
私有只读int\u fooId;
私有只读IFooService\u fooService;
公共FooInfo(intfooid、IFooService fooService)
{
_fooId=fooId;
_fooService=fooService;
}
公共双倍金额{get;private set;}
公共异步任务刷新量()
{
Amount=\u fooService.GetFooAmount(\u fooId);
等待任务。延迟(1000);
}
}
}
现在我对公共异步任务RefreshAmount()有问题
收到以下编译错误:
无法将类型“System.Threading.Tasks.Task”隐式转换为“double”
我是否采取了错误的方法使接口中的方法返回任务?如果没有,我如何解决错误消息?
更新:
另外,我想知道现在如何测试RefreshAmount方法单元?就像您不能将
字符串
分配给int
一样,您不能将任务
分配给double
任务
表示异步操作,而不是结果本身。要获得结果,您可以如下所示等待结果:
Amount = await _fooService.GetFooAmount(_fooId);
或者,您可以通过result
属性同步获得结果:
Amount = _fooService.GetFooAmount(_fooId).Result;
谢谢我还想知道,您是否认为我调用GetFooAmount的方法正确,更可靠?@Elham这取决于
GetFooAmount
的实现。