我的服务类似于:
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
class) 和配置定时器?
最佳答案
使方法 async
和 await
成为 Task
。
public async Task<string> GetData()
{
using(var timer = new TimerContext())
return await _service.GetData();
}
现在 timer
将在 GetData
完成时被释放,而不是在 开始 .
关于c# - 如何在 .NET 中装饰(时间)任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683636/