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);
您的方法中此行之后的任何代码都将在第二个延续中,并且只会在该行的操作完成后被调用。
我有一个使用 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);
您的方法中此行之后的任何代码都将在第二个延续中,并且只会在该行的操作完成后被调用。