修饰符异步对此项无效

时间:2012-06-12 12:58:47

标签: c# .net io windows-8 microsoft-metro

这似乎与数百个具有相同错误的其他问题重复。我已经看过所有这些并发现它们是无关的。

我正在制作一个小笔记应用程序并尝试从目录中读取文件。在MSDN示例之后,我有以下代码,但它给出了一个错误:


  

错误1修饰符'async'对此无效   项目C:\ Users \ Jase \ documents \ visual studio   2012 \ Projects \ AppNameHere \ AppNameHere \ DataModel \ AppNameHereDataSource.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.
    }

<小时/> 我不明白这里发生了什么。我跟着一切都是“T”。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:12)

您的方法签名不正确。看看它:

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(...);
}

答案 1 :(得分:1)

我认为您需要在 async之后放置public

public async NotesDataSource() 
{
    //your code here
}