Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用接口的异步方法_C#_Unit Testing_Asynchronous - Fatal编程技术网

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
的实现。