我想将一些内容写入本地文件,然后在文本块中表示。我有两个方法,CreateFile和Output,第一个方法使用WriteTextAsync方法将内容写入文件,第二个方法使用ReadTextAsync方法读取内容。我逐个调用了这两种方法,比如
CreateFile(data);
Output(file);
文件是一个全局变量,CreateFile方法将“数据”写入文件,而Output方法输出它的内容。 不幸的是,它并不总是有效,有时,我得到异常,说“对象引用未设置为对象”,经过研究,我发现有时候,文件为null,我认为它可能是由Output方法执行的,但是文件创造没有完成。因此,如果我添加一个断点,它总是有效。任何人都可以帮助我在文件创建完成后如何让Output方法执行?
谢谢
答案 0 :(得分:9)
其中一个原因可能是文件尚未创建,当第二种方法尝试读取它时:
所以,第二种方法必须等待第一种方法完成:
有几种方法可以实现这一目标。
其中一个将使用Task Class及其Task Parallel Library中的Wait Method:
var task = new Task(() => CreateFile(data));
task.Wait();
另一个,例如,ManualResetEvent Class:
ManualResetEvent 允许线程通过信令相互通信。通常,此通信涉及一个线程必须在其他线程可以继续之前完成的任务。
其他一些相关链接:
答案 1 :(得分:1)
由于您的方法调用异步方法,因此一个简单的解决方法是调用您的方法:
await CreateFile(data); // This waits for the method to complete before continuing.
Output(file);