如何在.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类)和处置定时器?

如何在.net中布置(安排)一个任务

asyncawait方法改为Task

public async Task<string> GetData()
{
    using(var timer = new TimerContext())
        return await _service.GetData();
}

现在timer将在GetData完成时处理,而不是在开始时立即处理