经过一段时间后调用异步方法

时间:2014-04-21 21:21:03

标签: c# asynchronous timer dispatcher

我在.Net C#中有以下代码进行调用,然后评估响应。如果响应处于待定状态,我想等待2秒钟,然后再次拨打电话。

我不知道如何做"等待2秒"这里,或者如何使用与同步方法一起使用的计时器。

我受限于PCL项目的限制。

private async Task<Response> ExecuteTask(Request request)
{
    var response = await GetResponse();

    switch(response.Status)
    {
        case ResponseStatus.Pending:
            //wait 2 seconds
            response = await ExecuteTask(request);
    }
    return response;
}

下面的代码可以吗?

System.Threading.Timer timer;

private async Task<Response> ExecuteTask(Request request)
{
    var response = await GetResponse();

    switch(response.Status)
    {
        case ResponseStatus.Pending:
        timer = new System.Threading.Timer(async obj =>
        {
            response = await ExecuteTask(request);
        }, null, 1000, System.Threading.Timeout.Infinite);
    }
    return response;
}

1 个答案:

答案 0 :(得分:1)

在异步中,您等待Task.Delay

private async Task<Response> ExecuteTask(Request request)
{
    var response = await GetResponse();

    switch(response.Status)
    {
        case ResponseStatus.Pending:
            await Task.Delay(TimeSpan.FromSeconds(2))
            response = await ExecuteTask(request);
            break;
    }
    return response;
}