以下代码有一个错误:result
不包含任何状态; IsCompleted
,IsCanceled
和IsFaulted
始终为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;
}
答案 0 :(得分:3)
你实际上做的是fire and forget
所以你不具备这种原则的地位
问题来自await
你必须添加等待才能恢复状态
var result = await _dataService.SyncPoll(webApiPoll);
//在这里
Task result = await client.SyncPollWeb(poll);
答案 1 :(得分:0)
发生这种情况是因为当您检查状态时您的任务尚未完成(并且正在运行) - 您只需创建它。你应该等到任何状态被确定为你的任务。使用
result.Wait();
检查result.IsCompleted 之前