我正在查看 http://www.albahari.com/threading/part4.aspx 中有关内存屏障的部分,并尝试创建一个基于async/await的示例,该示例提供了“我们真的需要锁和屏障吗?”下的示例:
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时仍然适用所有线程安全规则吗?