首页 > 解决方案 > 未捕获任务错误

问题描述

我正在尝试在 .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 上。

谁能启发我如何使用异步模式使其正常工作?

标签: c#asynchronous.net-core

解决方案


谢谢大家的指点。

问题是调用者方法是异步无效的,它应该是异步任务。

此外,我注意到有关 cosmos db 分区字段的建议 - 对于较小的数据集,我相信也可以使用 ID 作为分区字段。


推荐阅读