【问题标题】:Updating and retrieving data with async/await issue使用异步/等待问题更新和检索数据
【发布时间】:2020-09-19 00:42:07
【问题描述】:

我有一个异步方法,它调用一个 api 来写入数据并检索它。但是 get 方法总是返回之前的结果。如果我在方法调用之间引入延迟,我会得到更新的数据。

public async Task<ServerResult<IEnumerable<int>>> UpdateData(int data)
{
    var updatedResult = await apiClient.UpdateAsync(data);
    //If the updatedResult.StatusCode != 200 return appropriate message, otherwise get the updated data and return it. 
    var getResult = await apiClient.GetAllAsync();
    return getResult
}

我对 async/await 的理解是,每个等待的方法都是异步顺序执行的,这意味着 GetAllAsync 仅在 UpdateAsync 完成后运行(即 Task.Run(() =&gt; UpdateAsync(data)).ContinueWith(t =&gt; return GetAllAsync()))。如何确保 GetAllAsync 仅在 UpdateAsync 之后运行,而无需延迟或让客户端进行单独的 get 调用?

【问题讨论】:

  • 问题不在提供的代码中。检查UpdateAsync 是否返回仅在数据更新后才能完成的任务,检查您的api 行为是否正确并检查某处(在apiClient 或其后面的服务器应用程序中)是否没有缓存。

标签: c# asp.net-web-api async-await


【解决方案1】:

api 客户端内部发生了什么?在我看来,里面的代码并没有等待调用。您需要等待所有包含的异步操作。

行:

var updatedResult = await apiClient.UpdateAsync(data);

只有在完全完成后才会将执行返回到原始代码执行路径。

如果在UpdateAsync 代码中有一行没有 await 关键字,那么它就会被忽略。

这可能发生在服务器端。也许服务器端将请求排队并且没有当场保存。检查所有这些并在仍有问题时更新问题。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2018-12-09
    • 2016-02-16
    • 2017-11-19
    相关资源
    最近更新 更多