如何在.net中布置(安排)一个任务
本文关键字:一个 任务 安排 net 布置 | 更新日期: 2023-09-27 18:18:35
我有一个类似的服务:
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
实例的创建和检索时间。
我如何从timmedservice返回一个Task
,当运行时,将启动定时器,执行原始的Task
(从真正的Service
类)和处置定时器?
将async
和await
方法改为Task
。
public async Task<string> GetData()
{
using(var timer = new TimerContext())
return await _service.GetData();
}
现在timer
将在GetData
完成时处理,而不是在开始时立即处理