4
同步等待异步操作,为什么Wait()在这里冻结程序
前言:我在寻找一个解释,而不仅仅是一个解决方案。我已经知道了解决方案。 尽管花了几天时间研究有关基于任务的异步模式(TAP),异步和等待的MSDN文章,但我对某些更详细的信息仍然感到困惑。 我正在为Windows Store Apps编写记录器,并且希望同时支持异步和同步记录。异步方法遵循TAP,同步方法应隐藏所有这些内容,并且外观和工作方式与普通方法类似。 这是异步日志记录的核心方法: private async Task WriteToLogAsync(string text) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile file = await folder.CreateFileAsync("log.log", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(file, text, Windows.Storage.Streams.UnicodeEncoding.Utf8); } 现在对应的同步方法... 版本1: private void WriteToLog(string text) { Task task = WriteToLogAsync(text); task.Wait(); } 看起来正确,但是不起作用。整个程序永久冻结。 版本2: 嗯..也许任务没有开始? private void WriteToLog(string text) { Task task …