C#await运算符只能在异步方法中使用,但方法是异步

时间:2015-10-26 17:36:11

标签: c# windows asynchronous

行错误:await instance.CreateFile(); await运算符只能在异步方法中使用。考虑使用async修饰符标记此方法并将其返回类型更改为Task 我的理解是该方法已经异步,我不确定我做错了什么。这是VS 2015中的UWP应用程序。

public sealed partial class MainPage : Page
{
    private List<Customer> Customers;
    public MainPage()
    {
        this.InitializeComponent();
        CustomerDataAccessLayer instance = new CustomerDataAccessLayer();
        await instance.CreateFile();
}
}

public class CustomerDataAccessLayer
{
    public StorageFile mfile;
    public async Task CreateFile()
    {
        mfile = await ApplicationData.Current.LocalFolder.GetFileAsync("Customers.xml");
        if (mfile == null)
        {
            mfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("Customers.xml", CreationCollisionOption.ReplaceExisting);
        }
        else
        {
        }
        return;

    }
 }

2 个答案:

答案 0 :(得分:0)

正如其他人所说,错误消息是抱怨调用方法不是async,但构造函数不能标记为async

核心问题是您的UI无法异步加载 - 它必须立即加载 。我建议最初加载某种“加载...”状态,并启动异步操作。然后,当该操作完成时,更新 UI以显示数据。

答案 1 :(得分:-1)

要从同步函数(如构造函数)启动异步操作,可以使用Task。

Task.Run(async () =>
{
    //put your async code here
});

要等待此任务,您必须使用更多代码。

Task t = new Task(() => { /*Your code*/ });
t.Wait();