c# - 使用 ASP.NET Core 使用 async 和 await 进行异步编程
问题描述
我正在尝试使用异步编程async
来await
计算一些值并使用 ASP.NET Core 2.x 定期保存在数据库中。下面显示的方法不是从线程池执行的。
public async void CalculateCIndex(int CIndexId)
{
List<string> UserIds = _context.ApplicationUsers
.Where(m => m.EmailConfirmed == true)
.Select(m => m.Id).ToList();
for (int i = 0; i < UserIds.Count; i += 10)
{
var temp = UserIds.Skip(i).Take(10);
foreach (var Id in temp)
{
await Task.Run(async () =>
{
await CIndexCal(Id, CIndexId);
});
}
await Task.Delay(6000);
}
}
public async Task CIndexCal(string Id, int CIndexId)
{
_context.CIndexMember.Add(new CIndexMember
{
NCIndex = (decimal)((AindexAfterRar + Power) / CI.TotalCindex)
});
_context.SaveChanges();
}
解决方案
你可以在这里找到好的答案: async/await - when to return a Task vs void?
您的方法 CIndexCal 被声明为异步,但它根本不是异步的,因为您没有在内部使用异步方法。为了改变这一点,你可以改变:
_context.SaveChanges();
至
await _context.SaveChangesAsync();
然后代替:
await Task.Run(async () =>
{
await CIndexCal(Id, CIndexId);
});
您只需要:
await CIndexCal(Id, CIndexId);
而且我不确定您为什么要延迟,我认为您不需要这个:
await Task.Delay(6000);
推荐阅读
- django - Django 选择要升级的版本
- c# - 通过套接字连接到 WCF 主机
- javascript - 如何使用 HtmlUnit 从网站修复所有加载 url?
- javascript - 从es6中的文件获取json数据
- .htaccess - 重定向 url 包含旧 url 的一部分
- ios - iOS 中带有选项卡的视差滚动标题
- uitableview - 如何在 TableViewCell 类中的 TextField 委托方法上获取单元格索引
- python - 如何在 Gensim 的 Word2Vec 中正确使用 get_keras_embedding()?
- javascript - Angular - 在 *ngIf 显示元素后执行代码
- python - Python文件名正则表达式提取