【发布时间】:2017-06-15 03:38:37
【问题描述】:
我正在查看http://www.albahari.com/threading/part4.aspx 中描述的内存屏障部分 并尝试制作“我们真的需要锁和障碍吗?”下提供的示例的异步/等待版本:
public class Program
{
static void Main(string[] args)
{
TestAsync();
Console.ReadKey(true);
}
private static async void TestAsync()
{
bool complete = false;
Func<Task> testFunc = async () =>
{
await Task.Delay(1000);
bool toggle = false;
while (!complete) toggle = !toggle;
};
var task = testFunc();
Thread.Sleep(2000);
complete = true;
await task;
Console.WriteLine("Done");
}
}
在没有调试的情况下在发布模式下运行时,程序将永远不会按照它所基于的原始线程示例完成。
但是,我对 async/await 印象深刻,因为保存上下文的方式可以防止此类问题。还是在使用 async/await 时所有线程安全规则仍然适用?
【问题讨论】:
标签: c# .net multithreading caching asynchronous