c# - 未捕获任务错误
问题描述
我正在尝试在 .NET Core 控制台应用程序中实现一些 CosmosDB 代码。我正在尝试将文档添加到容器中,但遇到未处理的错误,这些错误正在退出我的方法,没有任何例外。
这是调用该方法的一些代码:
using (StreamReader file = File.OpenText(@"Orgs.json"))
{
JsonSerializer serializer = new JsonSerializer();
List<Org> org1 = (List<Org>)serializer.Deserialize(file, typeof(List<Org>));
foreach (var org in org1)
{
await orgClient.AddItemAsync(org);
}
}
这是方法:
public async Task AddItemAsync(T item)
{
try
{
Type myType = item.GetType();
PropertyInfo propertyInfo = myType.GetProperty("Id");
await this._container.CreateItemAsync<T>(item,
new PartitionKey(propertyInfo.GetValue(item).ToString()));
}
catch (AggregateException e)
{
Console.WriteLine(e.Message);
}
}
当它运行时,整个调用方法无一例外地失败并返回给调用者。但是当我从调用者那里执行此操作时,代码可以正常工作:
using (StreamReader file = File.OpenText(@"Orgs.json"))
{
JsonSerializer serializer = new JsonSerializer();
List<Org> org1 = (List<Org>)serializer.Deserialize(file, typeof(List<Org>));
foreach (var org in org1)
{
orgClient.AddItemAsync(org).Wait();
}
}
(即等待AddItemAsync
方法)
我已禁用“只是我的代码”调试器选项。这是在 VS2022 预览下的 .NET 5 上。
谁能启发我如何使用异步模式使其正常工作?
解决方案
谢谢大家的指点。
问题是调用者方法是异步无效的,它应该是异步任务。
此外,我注意到有关 cosmos db 分区字段的建议 - 对于较小的数据集,我相信也可以使用 ID 作为分区字段。
推荐阅读
- google-plus - URL 在浏览器中工作正常,但从谷歌加我们得到一个内部服务错误
- sql - ORA-02070: 数据库 %s%s 在此上下文中不支持 %s
- google-cloud-platform - Stackdriver Logging 无法识别来自 Team Drive 的 Google Apps 脚本项目
- javascript - 切换导航栏未正确切换
- javascript - 将输入字段与 javascript 输出相结合并使用 wp_mail 发送
- entity-framework - 为什么 T-SQL 将我的 DECIMAL 数据转换为 INT?
- delphi - 为什么我可以通过运行时包编译64位Delphi库而不是通过源代码?
- c - 如何在 C 中获取套接字选项的名称?
- javascript - 如何在没有框架的情况下使用 node.js 处理 ajax 发布请求?
- graphql - 连接、边、节点:如何使用节点的子类型