异步方法会阻止WPF

时间:2019-01-17 18:40:23

标签: c# entity-framework async-await

我正在制作一个WPF应用程序,该应用程序只是从数据库中获取一些数据并显示出来。我已经将EntityFrameworkCore和Pomelo连接器用于mysql。 与数据库的连接可以正常工作,并且可以正确检索数据。问题是,即使我在await中使用异步方法,UI也会每次都阻塞。这是Click侦听器的代码

private async void BT_Click(object sender, RoutedEventArgs e)
    {
        var userTask = api.GetMyUserAsync();
        Console.WriteLine("started task");
        var users = await userTask;
        Console.WriteLine(users.Name);
    }

这是Api.cs中查询的代码:

public async Task<User> GetMyUserAsync()
    { 
        return await context.User
            .Where(u => u.Username == username && u.Password == password)
            .FirstOrDefaultAsync();
    }

我不知道为什么会这样。其他答案也建议使用此代码,但对我而言不起作用。

弗朗切斯科

2 个答案:

答案 0 :(得分:0)

这不应该发生。 与await一起使用时,被声明为异步(带有Async后缀)的方法不应阻塞,您的代码应该可以正常工作。

您是否正在后台运行另一个查询? EF core doesn't support running multiple requests simultaneously(请参阅第一个警告)。 如果是这样,请尝试使所有查询一个一个地运行。

答案 1 :(得分:-1)

您从按钮单击事件中错误地调用了异步方法。应该是这样的:

await Task.Run(()=> api.GetMyUserAsync());

在这里查看答案:How to run and interact with an async Task from a WPF gui