C# 修饰符async对此项无效
这似乎并不是数百个具有相同错误的其他问题的重复。我把它们都看了一遍,发现它们毫无关联 我正在制作一个小便笺应用程序,并试图从目录中读取文件。按照MSDN示例,我有以下代码,但它给了我一个错误:C# 修饰符async对此项无效,c#,.net,io,windows-8,microsoft-metro,C#,.net,Io,Windows 8,Microsoft Metro,这似乎并不是数百个具有相同错误的其他问题的重复。我把它们都看了一遍,发现它们毫无关联 我正在制作一个小便笺应用程序,并试图从目录中读取文件。按照MSDN示例,我有以下代码,但它给了我一个错误: 错误1修饰符“async”对此无效 项目C:\Users\Jase\documents\visual studio 2012\Projects\AppNameHere\AppNameHere\DataModel\appnameeredatasource.cs 192 9 AppNameHere 我的密
错误1修饰符“async”对此无效 项目C:\Users\Jase\documents\visual studio 2012\Projects\AppNameHere\AppNameHere\DataModel\appnameeredatasource.cs 192 9 AppNameHere
我的密码是:
async public NotesDataSource()
{
StorageFolder documentsFolder = KnownFolders.DocumentsLibrary;
StringBuilder outputText = new StringBuilder();
IReadOnlyList<StorageFile> fileList =
await documentsFolder.GetFilesAsync();
outputText.AppendLine("Files:");
foreach (StorageFile file in fileList)
{
if (file.FileType == "txt")
{
outputText.Append(file.Name + "\n");
}
}
// lots of irrelevant code removed.
}
async public NotesDataSource()
{
StorageFolder documentsFolder=KnownFolders.DocumentsLibrary;
StringBuilder outputText=新建StringBuilder();
IReadOnlyList文件列表=
等待documentsFolder.getFileAsync();
AppendLine(“文件:”);
foreach(文件列表中的存储文件)
{
如果(file.FileType==“txt”)
{
outputText.Append(file.Name+“\n”);
}
}
//删除了大量不相关的代码。
}
我不明白这里发生了什么。我把一切都看得很清楚。有人能帮忙吗
谢谢大家! 我认为您需要将
async
放在public
之后:
public async NotesDataSource()
{
//your code here
}
您的方法签名不正确。看看它:
async public NotesDataSource()
首先,async
必须位于访问修饰符IIRC之后
其次,要么您试图创建一个异步构造函数(这是您无法做到的),要么您试图编写一个没有返回类型的方法(这同样是无效的)
试试这个:
public async Task NotesDataSource()
如果你想让它成为一种方法的话。如果要有效地创建异步构造函数(或类似的构造函数),必须使用异步静态方法:
public static async Task<NotesDataSource> CreateInstance()
{
// Do async stuff here which fetches all the necessary data...
return new NotesDataSource(...);
}
公共静态异步任务CreateInstance()
{
//在这里执行异步操作,获取所有必要的数据。。。
返回新NotesDataSource(…);
}
您要针对的.NET Framework是什么<如果安装了.NET Framework的扩展和/或您试图以.NET Framework 4.5为目标,则code>async仅是一个关键字。请提供指向MSDN示例的链接。它适用于Windows 8版本预览中的Metro应用:-此错误不是因为Windows 8尚未完成(正如我多次被告知的那样)-因为许多其他应用正在读取Metro应用中的文件并向其写入。根据重复问题,可能存在重复,您不能有异步构造函数。我正在尝试在注释和答案中提供一些建议,稍后会回来。谢谢大家:-)我不能在访问修饰符之后使用异步。编译器发出嘶嘶声,告诉我不要这样做。所以我试着把它放在修饰符之前,它开始工作了(无论如何比以前更有效)@Jason:你仍然有一个编译错误,所以它没有真正工作。。。在访问修饰符之后应该有async
,所以我认为你只是在转移问题。@JonSkeet:出于好奇,(如果你不介意的话)我想知道:你是如何每天发布这么多答案(和评论)的?你平均花多少时间在这上面?@JonSkeet:当然,这是一项背景活动。我只是想知道,为什么人类能够发布这么多答案;最重要的是,你不会厌倦回答琐碎的问题。我必须说你对C#很有热情。顺便说一句,我能假设你每天总共花将近4个小时吗?@JonSkeet:所以你一点都不知道?甚至连一个范围都没有,比如,4-6个小时,或者别的什么。。或者至少,你多久去一次,或者多少次,等等,诸如此类的事情?我就是这么想的。编译器出于某种原因不喜欢这样做。@Jason,这是因为除此之外,您还需要实现Jon Skeet关于构造函数和静态方法的一个或另一个建议。