我目前正在开发一些项目。我需要将一个项目添加到数据库,然后执行另一个请求以获取刚添加的项目。当然,一切都必须是非阻塞的,用户需要能够在后台执行这些操作的同时仍然可以使用该应用程序。等待异步函数结束后再执行另一个
这里是我使用的代码:
await AddItem(new Item(...params here ...);
return new ItemAdded(await GetItem(id));
我想等待AddItem
要执行调用GetItem(id)
之前,因为我需要的项目在数据库中得到它之前加入。但是,似乎并非如此。
我试图把调试信息的GetItem
和AddItem
功能,在邮件内的GetItem
显示开头的消息之前在AddItem
结束。
如何确保在不阻止用户的情况下等待AddItem
的结束?
编辑
的AddItem
public Task<Item> AddItem(Item item) {
return Task.Run(() => {
var param = ... params ...
_client.Post<string>("/item", param);
return item;
});
}
的GetItem
public Task<Item> GetItem(Guid id)
{
return Task.Run(() => _client.Get<Item>("/item/" + id));
}
后
public async Task<T> Post<T>(string path, Dictionary<string, string> parameters)
{
var response = await _httpClient.PostAsync(_apiUrl + path, new FormUrlEncodedContent(parameters));
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(result);
}
@mybirthname使调用异步并不一定使它们并发。事实上,在上面的例子中,它们已经是连续的。 –
该代码应该已经做你所描述的,你能解释你为什么要问吗?在AddItem完成之前,'await AddItem'不应该继续执行当前的方法。您可能需要在'AddItem'内部发布代码。 –
在你提供的例子中,'AddItem'将在'GetItem'被调用之前完成。如果这不是你所看到的行为,你需要分享更多的代码。 –