编写和读取文件异步

时间:2012-10-29 03:16:25

标签: c# asynchronous windows-8 .net-4.5

我想将一些内容写入本地文件,然后在文本块中表示。我有两个方法,CreateFile和Output,第一个方法使用WriteTextAsync方法将内容写入文件,第二个方法使用ReadTextAsync方法读取内容。我逐个调用了这两种方法,比如

CreateFile(data);
Output(file);

文件是一个全局变量,CreateFile方法将“数据”写入文件,而Output方法输出它的内容。 不幸的是,它并不总是有效,有时,我得到异常,说“对象引用未设置为对象”,经过研究,我发现有时候,文件为null,我认为它可能是由Output方法执行的,但是文件创造没有完成。因此,如果我添加一个断点,它总是有效。任何人都可以帮助我在文件创建完成后如何让Output方法执行?

谢谢

2 个答案:

答案 0 :(得分:9)

其中一个原因可能是文件尚未创建,当第二种方法尝试读取它时:

Diagram 1

所以,第二种方法必须等待第一种方法完成

Diagram 2

有几种方法可以实现这一目标。

其中一个将使用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);
相关问题