C# 如果我一个接一个 运行 2 个异步命令,我能保证第一个总是 运行 在第二个之前吗?

C# If I run 2 async commands one after the other, can I guarantee the first will always run before the second?

我有一个使用 API 执行 CRUD 操作的存储库服务,当我创建记录时,我需要 运行 更新(以保存使用 ID ( int SQL 标识字段)) 由Create 方法生成。

所以如果我在我的控制器方法中有这个...

var response = await repository.Create(obj);

response.Result.Reference = _service.CreateReference(response.Result);

await repository.Update(response.Result);

创建总是 运行 在调用更新之前完成吗? (因为我正在使用 .Result)?

谢谢

简答:是。

该方法中此行之后的所有内容...

var response = await repository.Create(obj);

... 处于 continuation - 将其视为搁置,直到该行完成。这并不意味着 之外的东西被阻止了; await 意味着其他事情可以在等待的同时发生——毕竟这才是重点。

对于您的情况而言,这意味着以下两行(以及以相同方法跟随它们的任何其他行)将“搁置”,直到上述内容完成。一旦完成,这两个的执行将继续:

response.Result.Reference = _service.CreateReference(response.Result);
await repository.Update(response.Result);

此时,同样的规则适用于最后一行:

await repository.Update(response.Result);

您的方法中此行之后的任何代码都将在第二个延续中,并且只会在该行的操作完成后被调用。