小编Chr*_*oph的帖子

在任何情况下,异步等待方法中的对象更改是否在完成后可见?

在任何情况下,异步/等待方法中的对象更改在完成后是否可见?

经过大量调查后,我仍然无法找到明确的声明,如果在任何情况下完成 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)

.net c# memory-model async-await .net-core

2
推荐指数
1
解决办法
218
查看次数

标签 统计

.net ×1

.net-core ×1

async-await ×1

c# ×1

memory-model ×1