gpt4 book ai didi

c# - 在 ADO.Net C# 中执行并行数据库访问

转载 作者:行者123 更新时间:2023-11-30 18:20:31 27 4
gpt4 key购买 nike

我正在开发 asp.net 应用程序以在仪表板上显示多个小部件。因此,我正在发送一个 ajax 调用,以将所有必需的数据获取到仪表板小部件。

在服务器方法中,有多个数据库调用通过存储过程从数据库中获取每个小部件的相关数据。方法内容如下;

List<DashboardItem> items = new List<DashboardItem>();
items.Add(GetUserList());
items.Add(GetNewsList());
items.Add(GetRecentlyViewedList());
items.Add(GetSentEmailsList());
.....
return items;

由于数据库中没有记录,这个过程似乎很慢。

我正在尝试使用异步数据库调用来执行上面的代码。似乎异步数据库操作可以改进这个过程。谁能帮我写异步数据库操作?或任何其他提高数据库方法调用性能的建议?

最佳答案

您需要将入口点标记为 Task 返回,然后您可以使用 asyncawait 关键字。此外,GetUserListGetNewsListGetRecentlyViewedListGetSentEmailsList 方法也必须是 Task 返回,这样您就可以一直使用 async --(请注意将 Async 添加到方法中以指示其性质的命名约定)。

public async Task GetDashboardItemsAsync()
{
var getUserTask = GetUserListAsync();
var getNewsTask = GetNewsListAsync();
var getRecentlyViewedTask = GetRecentlyViewedListAsync();
var getSentEmailsTask = GetSentEmailsListAsync();

await Task.WhenAll(getUserTask,
getNewsTask,
getRecentlyViewedTask,
getSentEmailsTask);

return new List<DashboardItem>
{
getUserTask.Result,
getNewsTask.Result,
getRecentlyViewedTask.Result,
getSentEmailsTask.Result,
};
}

将任务存储在变量中将允许您在它们全部实现后访问 .ResultTask.WhenAll 方法接受一个 Task 数组,并在所有任务完成后继续。

使用这种方法,您基本上是说开始每个任务以获取仪表板数据,一旦所有异步操作运行完成,然后继续返回 DashboardItem 列表> 给来电者。


这主要是解决调用代码以及如何以并行方式处理多个任务。为了在 ADO.NET 级别启动提取操作,这应该是一个不同的问题。但是 ADO.NETEntity Framework 上也有很多 async API。

关于c# - 在 ADO.Net C# 中执行并行数据库访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com