C# 异步写入和读取文件

C# 异步写入和读取文件,c#,asynchronous,windows-8,.net-4.5,C#,Asynchronous,Windows 8,.net 4.5,我想将一些内容写入本地文件,然后在文本块中表示它。我有两种方法,CreateFile和Output,第一种方法使用WriteTextAsync方法将内容写入文件,第二种方法使用ReadTextAsync方法读取内容。我一个接一个地调用了这两种方法 CreateFile(data); Output(file); file是一个全局变量,CreateFile方法将“数据”写入文件,Output方法将其内容输出。 不幸的是,它并不总是有效的,有时,我会遇到异常,说“对象引用未设置为对象”,经过研究,

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

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


感谢

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

因此,第二种方法必须等待第一种方法完成:

有几种方法可以实现这一点

其中之一将使用from及其:

另一个例子是:

ManualResetEvent允许线程通过信令相互通信。通常,此通信涉及一个任务,其中一个线程必须在其他线程继续之前完成该任务

其他一些相关链接:

  • 一篇关于C#中多线程的优秀文章:


由于您的方法调用异步方法,一个简单的修复方法是如下调用您的方法:

await CreateFile(data);   // This waits for the method to complete before continuing.  
Output(file);

@MatthewRz:windows-8的
tag意味着C#5.0。@James感谢James,很高兴听到它的帮助。
await CreateFile(data);   // This waits for the method to complete before continuing.  
Output(file);