Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 如何在.NET中布置(时间)任务?_C#_.net_Asynchronous_Task Parallel Library_Task - Fatal编程技术网

C# 如何在.NET中布置(时间)任务?

C# 如何在.NET中布置(时间)任务?,c#,.net,asynchronous,task-parallel-library,task,C#,.net,Asynchronous,Task Parallel Library,Task,我的服务类似于: public class Service : IService { public Task<string> GetData() { var client = new HttpClient(); var str = client.GetStringAsync("http://www.example.com"); return str; } //... } 公共类服务:iSeries {

我的服务类似于:

public class Service : IService
{
    public Task<string> GetData()
    {
        var client = new HttpClient();
        var str = client.GetStringAsync("http://www.example.com");
        return str;
    }
    //...
}
公共类服务:iSeries
{
公共任务GetData()
{
var client=新的HttpClient();
var str=client.GetStringAsync(“http://www.example.com");
返回str;
}
//...
}
现在,使用decorator模式,我想对这个方法计时

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();
    }
}        
公共类时间服务:iSeries设备
{
私人只读设备服务;
公共时间服务(iSeries服务)
{
_服务=服务;
}
公共任务GetData()
{
使用(var timer=new TimerContext())
return_service.GetData();
}
}        
TimerContext
在构建后开始计时,在处理时停止计时,并将其发布到某种日志中,而不需要返回测量的时间

现在,使用上述方法并没有计算任务的实际执行时间,而仅仅是创建和检索
任务
实例


如何从TimedService返回
任务
,当运行时,它将启动计时器,执行原始的
任务
(从真实的
服务
类)并处理计时器?

使方法
异步
等待
任务

public async Task<string> GetData()
{
    using(var timer = new TimerContext())
        return await _service.GetData();
}
公共异步任务GetData() { 使用(var timer=new TimerContext()) return wait_service.GetData(); }

现在,
timer
将在
GetData
完成后,而不是在它启动后立即进行处理。

您可以使用stopawtch并返回一个任务,其中int是运行所用的时间。您可以在
\u service.GetData()
中传递
TimerContext
,然后手动进行处理,如果它适合您。@Vyrira:是的,我可以,但这会破坏分离关注点的目的(即,关注
TimedService
类中的计时问题,以及关注
服务中实际获取数据的问题)