在任何情况下,异步/等待方法中的对象更改在完成后是否可见?
经过大量调查后,我仍然无法找到明确的声明,如果在任何情况下完成 await 后,从异步等待方法内部对外部对象所做的更新是否对正在进行的代码可见。
代码示例是某种过滤器链,其中每个过滤器都应该看到先前过滤器所做的任何更改。之后,相同的对象将用于进一步处理。
过滤器不会并行执行。除此之外,由于性能原因,我不想克隆对象。
请参阅以下代码示例:
class Program
{
private List<ICallback> _allCallbacks = new List<ICallback>();
public Program()
{
// Setup callbacks, perhaps by dependency injection
_allCallbacks.Add(new MyCallback1());
_allCallbacks.Add(new MyCallback2());
}
static async Task Main()
{
Program p = new Program();
await p.RunBusinessLogic();
Console.ReadLine();
}
private async Task RunBusinessLogic()
{
MyDto dto = new MyDto();
// Setting initial value
dto.TestProperty = "start";
// Execute all callbacks and await completion
await ExecuteCallbacks(dto).ConfigureAwait(false);
// *** Is dto.TestProperty always guaranteed to …Run Code Online (Sandbox Code Playgroud)