我的服务类似于:
public class Service : IService
{
public Task<string> GetData()
{
var client = new HttpClient();
var str = client.GetStringAsync("http://www.example.com");
return str;
}
//...
}
现在,使用装饰器模式我想要计时这个方法
public class TimedService : IService
{
private readonly IService _service;
public TimedService(IService service)
{
_service = service;
}
public Task<string> GetData()
{
using(var timer = new TimerContext())
return _service.GetData();
}
}
TimerContext
在构建之后开始计时并停止处理并将其发布到某种日志中,而不需要返回测量的时间。
现在使用上述方法不会计算任务的实际执行时间,而只是创建和检索Task
实例。
如何从TimedService返回Task
,在运行时,将启动计时器,执行原始Task
(来自真实Service
类)并配置计时器?
答案 0 :(得分:8)
将方法async
和await
设为Task
。
public async Task<string> GetData()
{
using(var timer = new TimerContext())
return await _service.GetData();
}
现在timer
将在GetData
完成后处理,而不是在启动后立即处理。