提问人:Christophe 提问时间:7/1/2023 最后编辑:Christophe 更新时间:7/11/2023 访问量:405
UML 序列图中的异步回复(async/await 模式)
Asynchronous replies in UML sequence diagrams (async/await pattern)
问:
许多现代语言都提倡异步调用,并在真正需要时等待结果。示例:在 C# 和 Swift 中为 / 或在 C++ 中为 /。以以下假设的实现为例:async
await
promise
future
class X {
private Y y;
public async void doSomething() {
var someTask = y.doSomeAsyncOp();// Asynchronous call
doSomethingImmediately(); // Potentially in parallel with async behavior
var result = await someTask; // Getting or waiting for result of async call
}
...
}
这在设计中实现了异步调用的回复意图:
不幸的是,根据 UML 2.5.1,回复消息似乎只用于同步调用,而异步调用不应该有回复。请参阅第 17.4.3 节:
如果 messageSort 为 reply,则 Message 表示对 Operation 的同步调用的返回值。Message 的参数对应于操作 (...) 的 out、inout 和 return ownedParameters。
规范的第 13 节定义了同步和异步行为,这与这种理解是一致的。那么,如何使用合法的UML对设计进行建模呢?
相反方向的异步消息:如果有一些回调操作,效果会很好。但是在没有回调的情况下,消息的签名是什么?
使用第二次同步调用来建模,直到 的执行规范结束。优点:它实现了同步。但是消息签名是什么?
await
y
中间生命线不是一个相关的解决方案:非常详细的实现级别的UML图将比代码更难理解。而且它不能很好地传达设计意图。
Task
答:
评论
await
await