我正在查看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");
}
}
Run Code Online (Sandbox Code Playgroud)
在没有调试的情况下在释放模式下运行时,程序将永远不会按照它所基于的原始线程示例完成.
但是,由于上下文保存的方式,我在async/await的印象下会阻止这些问题.或者在使用async/await时是否仍然适用所有线程安全规则?