Trae + claude3.7
事情的经过是这样的:
我有个方法代码如下:
/// <summary>
/// 获取客户端列表
/// </summary>
/// <param name="input">查询条件参数,包含搜索、排序和分页信息</param>
/// <param name="cancellationToken">异步取消标记</param>
/// <returns>客户端数据集合</returns>
public async Task<Khdsc> GetClientsAsync(Hqkhdsr input, CancellationToken cancellationToken = default)
{
var q = db.Clients.AsNoTracking();
//条件和排序...略...
logger.LogWarning("执行GetClientsAsync" + tp.GetUtcNow());
var total = await q.CountAsync(cancellationToken);//await Task.Delay(3000);
q = q.OrderBy(input.sort + " " + input.Order).Skip(input.Offset).Take(input.Limit);// .Page(input.Limit, input.Offset / input.Limit + 1);
var list = await q.ToListAsync(cancellationToken);
return new Khdsc
{
BridgePort = default,
BridgeType = default,
Ip = default,
Total = total,
Rows = list.Select(MapClientEntityToKhdrow).ToList(),
};
}
然后执行报错了:
在 Microsoft.EntityFrameworkCore.Infrastructure.Internal.ConcurrencyDetector.EnterCriticalSection()
在 Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.<MoveNextAsync>d__20.MoveNext()
在 System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.<ToListAsync>d__67`1.MoveNext()
在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.<ToListAsync>d__67`1.MoveNext()
在 YCSDK.Sdf.<GetClientsAsync>d__12.MoveNext() 在 D:\fyjiot\src\YCSKDFolder\YCSDK\Sdf.cs 中: 第 171 行
在 YCSDK.RCL.Client.ClientList.<LoadClientListAsync>d__17.MoveNext() 在 D:\fyjiot\src\YCSKDFolder\YCSDK.RCL\Client\ClientList.razor.cs 中: 第 77 行
有经验的老表一看就晓得是多线程使用同一个dbcontext实例出的问题。所以我仔细排查了我的代码,实在看不出问题,想想问问Ai吧,对话如下:



看到这里我开始怀疑我自己了,也想不通微软为什么要在efcore9中做出这样的改变,会不会是ef9有bug?这样设计不合理啊。
然后我就开始换豆包、chatgpt、千问,各种问,它们基本没法提供有价值的信息。然后又直接各种搜索,由于ef9太新,也搜不出啥东东来。
然后又建测试项目,单独测试又没问题,这个时候我就开始怀疑开始Ai给的回答了,
最终各种折腾发现问题是我用的antblazor刷新数据默认是开了线程的,重点是界面部分我也是让Ai它帮我写的。
到这里问题就解决了。
我想说的是,我开始问ai它给了我一个错误的回答,辛亏我了解这里,所以质疑它,但它居然再次回答时说得有理有据,我不信邪再次问他是不是ef9的版本导致的,它也说得头头是道。
如果不熟悉ef的人估计会被它带偏,对ef9会产生一种错误的认识,搞得不好还会去把老项目都重构下,浪费时间,以后发现不是ef9的问题又重构回去,再浪费一次时间。
所以感觉目前的Ai有个陷阱,就是让不了解某个领域的人,可以用Ai去完成那个领域的事,同时埋一堆雷在那里。