阅读Joseph Albahari的线程教程,以下内容被提及为内存障碍的生成器:
lock陈述(Monitor.Enter/ Monitor.Exit)Interlocked班上的所有方法此外,Hans Passant和Brian Gideon 补充了以下内容(假设其中没有一个已经符合以前的类别之一):
Thread.Sleep()我想知道这个清单是否完整(如果完整清单甚至可以实际制作)
编辑补充建议:
在任何情况下,异步/等待方法中的对象更改在完成后是否可见?
经过大量调查后,我仍然无法找到明确的声明,如果在任何情况下完成 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)