任务未返回IsCompleted状态

时间:2016-05-23 08:09:34

标签: c# asynchronous async-await task

以下代码有一个错误:result不包含任何状态; IsCompletedIsCanceledIsFaulted始终为false,但我测试Task是否正常工作,哪里有问题?

var result = _dataService.SyncPoll(webApiPoll); 

if (result.IsCompleted)
{
    _logger.Info("Execute sync, poll was completed");
    poll.IsSynchronized = true;
    poll.ServerStatus = ServerStatus.Active;
    ctx.SaveChanges();
}

//////

public Task SyncPoll(PollDto poll)
{
    if (!_isAuthorized)
    {
        return null;
    }
    var client = new ApiClient(_baseApiUrl, _authToken);
    Task result = Task.Run(async () => await client.SyncPollWeb(poll));
    return result;
}

///////

public async Task<HttpResponseMessage> SyncPollWeb(PollDto poll)
{
    HttpResponseMessage resp;
    //System.Diagnostics.Debugger.Launch();
    using (var client = GetClient())
    {
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(_authType, _accessToken);
        resp = await client.PostAsJsonAsync<PollDto>("api/poll", poll);
    }
    return resp;
}

2 个答案:

答案 0 :(得分:3)

你实际上做的是fire and forget所以你不具备这种原则的地位

问题来自await 你必须添加等待才能恢复状态

  var result =  await _dataService.SyncPoll(webApiPoll); 

//在这里

 Task result = await   client.SyncPollWeb(poll);

答案 1 :(得分:0)

发生这种情况是因为当您检查状态时您的任务尚未完成(并且正在运行) - 您只需创建它。你应该等到任何状态被确定为你的任务。使用

result.Wait();
检查result.IsCompleted

之前