gpt4 book ai didi

c# - 尝试获取结果列表时等待/异步错误

转载 作者:行者123 更新时间:2023-12-04 02:08:19 24 4
gpt4 key购买 nike

有人可以向我解释为什么我会为此收到设计/编译时错误。

我正在尝试根据上次更新日期或创建日期获取每个表的最后一个 Guid。

var accountId = context.Account.OrderBy(x => x.LastUpdateDate).ThenBy(x=>x.LastUpdateDate).FirstOrDefaultAsync(x => x.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var transactionLineId = context.TransactionLine.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.Transaction.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var transactionId = context.Transaction.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var budgetId = context.Budget.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var scheduleId = context.Schedule.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;

然后,等待每个响应并传递给一个方法。

var guids = new List<Guid> { await accountId, await transactionLineId, await transactionId, await budgetId, await scheduleId };

var checkGuid = MungeTwoGuids(guids);

但是我得到了错误:

CS1061 'Task' does not contain a definition for 'ExternalId' and no accessible extension method 'ExternalId' accepting a first argument of type 'Task' could be found (are you missing a using directive or an assembly reference?)

这发生在第一行。我以为我可以调用所有这些选择....一次,基本上...然后等待所有响应。而不是打电话,等,打电话,等....

这不是实现我想要做的事情的正确方法吗?嗯,这不是,因为我有一个错误,但我对 await 的理解是否走错了路?

然后我从选择中删除了该字段,并尝试像这样获取它,但是......不。

await accountId.Result.ExternalId,

最佳答案

你的 FirstOrDefaultAsync返回 Task<T> , 不是 T本身,因此没有 ExternalId .

通常你会有两个选择:

  • 选择 ExternalId预付 Select稍后等待任务,或者
  • 等待Task<T>首先,结果将是 T ,包含您的属性(property),以便您可以访问它。

但是,正如@GSerg 指出的那样:第一个选项不适用,因为 executing parralell queries will result in a concurrency exception .


因此,在您的情况下等待 FirstOrDefaultAsync 是有意义的直接使用 Select , ??或空检查以克服可能的空引用异常。


尽量避免 accountId.Result.ExternalId因为它会使您的代码同步运行,并且您将失去异步调用的好处。看: What is the difference between await Task<T> and Task<T>.Result?

关于c# - 尝试获取结果列表时等待/异步错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590730/

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